You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2015/11/25 17:02:08 UTC
svn commit: r1716453 [2/2] - in /james/project/trunk/server: ./
container/cassandra-guice/ container/cassandra-guice/src/test/resources/
mailet/mailets/
mailet/mailets/src/main/java/org/apache/james/transport/mailets/managesieve/
mailet/mailets/src/mai...
Added: james/project/trunk/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/managesieve/ManageSieveMailetTestCase.java
URL: http://svn.apache.org/viewvc/james/project/trunk/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/managesieve/ManageSieveMailetTestCase.java?rev=1716453&view=auto
==============================================================================
--- james/project/trunk/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/managesieve/ManageSieveMailetTestCase.java (added)
+++ james/project/trunk/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/managesieve/ManageSieveMailetTestCase.java Wed Nov 25 16:02:07 2015
@@ -0,0 +1,1194 @@
+/*
+ * 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.managesieve;
+
+import org.apache.james.managesieve.mock.MockSieveParser;
+import org.apache.james.managesieve.mock.MockSieveRepository;
+import org.apache.james.sieverepository.api.exception.DuplicateUserException;
+import org.apache.james.sieverepository.api.exception.QuotaExceededException;
+import org.apache.james.sieverepository.api.exception.ScriptNotFoundException;
+import org.apache.james.sieverepository.api.SieveRepository;
+import org.apache.james.sieverepository.api.exception.StorageException;
+import org.apache.james.sieverepository.api.exception.UserNotFoundException;
+import org.apache.mailet.Mail;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+
+import javax.activation.DataHandler;
+import javax.mail.Address;
+import javax.mail.BodyPart;
+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.MimeMessage.RecipientType;
+import javax.mail.internet.MimeMultipart;
+import javax.mail.util.ByteArrayDataSource;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Scanner;
+
+public class ManageSieveMailetTestCase {
+
+ ManageSieveMailet _mailet = null;
+ SieveRepository _repository = null;
+ MockSieveParser _parser = null;
+
+ @Before
+ public void setUp() throws Exception {
+ _mailet = new ManageSieveMailet();
+ _repository = new MockSieveRepository();
+ _parser = new MockSieveParser();
+ _mailet.setSieveParser(_parser);
+ _mailet.setSieveRepository(_repository);
+ MockMailetConfig config = new MockMailetConfig(new MockMailetContext());
+ config.setInitParameter("helpURL", "file:./src/test/resources/help.txt");
+ _mailet.init(config);
+ }
+
+ @Test
+ public final void testCapability() throws MessagingException, IOException {
+ MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties()));
+ message.setSubject("CAPABILITY");
+ message.setSender(new InternetAddress("test@localhost"));
+ message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost"));
+ message.saveChanges();
+ Mail mail = new MockMail();
+ mail.setMessage(message);
+
+ _parser.setExtensions(Arrays.asList("a", "b", "c"));
+
+ // Unauthorised
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ assertNotNull(result);
+ // Check the subject header
+ assertEquals("Re: CAPABILITY", result.getSubject());
+ // Check the recipient
+ Address[] recipients = result.getRecipients(RecipientType.TO);
+ assertEquals(1, recipients.length);
+ assertEquals(message.getSender(), recipients[0]);
+ // Check the response
+ MimeMultipart multipart = (MimeMultipart) result.getContent();
+ assertEquals(1, multipart.getCount());
+ BodyPart part = multipart.getBodyPart(0);
+ String response = (String) part.getContent();
+ Scanner scanner = new Scanner(response);
+ Map<String, String> capabilities = new HashMap<String, String>();
+ while (scanner.hasNextLine()) {
+ String key = scanner.next();
+ String value = null;
+ if (scanner.hasNextLine()) {
+ value = scanner.nextLine().trim();
+ }
+ capabilities.put(key, value);
+ }
+ assertEquals("1.0", capabilities.get("VERSION"));
+ assertEquals("a b c", capabilities.get("SIEVE"));
+ assertEquals("Apache ManageSieve v1.0", capabilities.get("IMPLEMENTATION"));
+ assertEquals(null, capabilities.get("OK"));
+
+ // Authorised
+ mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, "test");
+ _mailet.service(mail);
+ // Check the response
+ result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ multipart = (MimeMultipart) result.getContent();
+ assertEquals(1, multipart.getCount());
+ part = multipart.getBodyPart(0);
+ response = (String) part.getContent();
+ scanner = new Scanner(response);
+ capabilities = new HashMap<String, String>();
+ while (scanner.hasNextLine()) {
+ String key = scanner.next();
+ String value = null;
+ if (scanner.hasNextLine()) {
+ value = scanner.nextLine().trim();
+ }
+ capabilities.put(key, value);
+ }
+ assertEquals("1.0", capabilities.get("VERSION"));
+ assertEquals(message.getSender().toString(), capabilities.get("OWNER"));
+ assertEquals("a b c", capabilities.get("SIEVE"));
+ assertEquals("Apache ManageSieve v1.0", capabilities.get("IMPLEMENTATION"));
+ assertEquals(null, capabilities.get("OK"));
+
+ // Extra arguments should be rejected
+ message.setSubject("CAPABILITY extra");
+ message.saveChanges();
+ _mailet.service(mail);
+ result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ multipart = (MimeMultipart) result.getContent();
+ assertEquals(1, multipart.getCount());
+ part = multipart.getBodyPart(0);
+ response = (String) part.getContent();
+ assertEquals("NO \"Too many arguments: extra\"", response);
+
+
+ }
+
+ @Test
+ public final void testPutScript() throws MessagingException, IOException, UserNotFoundException, ScriptNotFoundException, StorageException {
+ MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties()));
+ String scriptName = "scriptName";
+ String scriptContent = "scriptContent";
+ message.setSubject("PUTSCRIPT \"" + scriptName + "\"");
+ message.setSender(new InternetAddress("test@localhost"));
+ message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost"));
+ MimeMultipart multipart = new MimeMultipart();
+ MimeBodyPart scriptPart = new MimeBodyPart();
+ scriptPart.setDataHandler(
+ new DataHandler(
+ new ByteArrayDataSource(
+ scriptContent,
+ "application/sieve; charset=UTF-8")
+ ));
+ scriptPart.setDisposition(MimeBodyPart.ATTACHMENT);
+ // setting a DataHandler with no mailcap definition is not
+ // supported by the specs. Javamail activation still work,
+ // but Geronimo activation translate it to text/plain.
+ // Let's manually force the header.
+ scriptPart.setHeader("Content-Type", "application/sieve; charset=UTF-8");
+ scriptPart.setFileName(scriptName);
+ multipart.addBodyPart(scriptPart);
+ message.setContent(multipart);
+ message.saveChanges();
+ Mail mail = new MockMail();
+ mail.setMessage(message);
+
+ // Unauthorised
+ {
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ assertNotNull(result);
+ // Check the subject header
+ assertEquals("Re: PUTSCRIPT \"" + scriptName + "\"", result.getSubject());
+ // Check the recipient
+ Address[] recipients = result.getRecipients(RecipientType.TO);
+ assertEquals(1, recipients.length);
+ assertEquals(message.getSender(), recipients[0]);
+ // Check the response
+ MimeMultipart content = (MimeMultipart) result.getContent();
+ assertEquals(1, content.getCount());
+ BodyPart part = content.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("NO", response.trim());
+ }
+
+ // Authorised
+ {
+ mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, message.getSender().toString());
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ // Check the response
+ MimeMultipart content = (MimeMultipart) result.getContent();
+ assertEquals(1, content.getCount());
+ BodyPart part = content.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals(response, "OK (WARNINGS) \"warning1\" \"warning2\"");
+ assertEquals(scriptContent, _repository.getScript(message.getSender().toString(), scriptName));
+ }
+
+ // Extra arguments
+ {
+ message.setSubject("PUTSCRIPT \"" + scriptName + "\" extra");
+ message.saveChanges();
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ MimeMultipart content = (MimeMultipart) result.getContent();
+ assertEquals(1, content.getCount());
+ BodyPart part = content.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("NO \"Too many arguments: extra\"", response);
+ }
+
+ // Syntax Error
+ {
+ message = new MimeMessage(Session.getDefaultInstance(new Properties()));
+ message.setSubject("PUTSCRIPT \"" + scriptName + "\"");
+ message.setSender(new InternetAddress("test@localhost"));
+ message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost"));
+ multipart = new MimeMultipart();
+ scriptPart = new MimeBodyPart();
+ scriptPart.setDataHandler(
+ new DataHandler(
+ new ByteArrayDataSource(
+ "SyntaxException",
+ "application/sieve; charset=UTF-8")
+ ));
+ scriptPart.setHeader("Content-Type", "application/sieve; charset=UTF-8");
+ scriptPart.setDisposition(MimeBodyPart.ATTACHMENT);
+ scriptPart.setFileName(scriptName);
+ multipart.addBodyPart(scriptPart);
+ message.setContent(multipart);
+ message.saveChanges();
+ mail.setMessage(message);
+ mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, message.getSender().toString());
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ // Check the response
+ MimeMultipart content = (MimeMultipart) result.getContent();
+ assertEquals(1, content.getCount());
+ BodyPart part = content.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertTrue(response.startsWith("NO \"Syntax Error: "));
+ assertEquals(scriptContent, _repository.getScript(message.getSender().toString(), scriptName));
+ }
+
+ // No script
+ {
+ message = new MimeMessage(Session.getDefaultInstance(new Properties()));
+ message.setSubject("PUTSCRIPT \"" + scriptName + "\"");
+ message.setSender(new InternetAddress("test@localhost"));
+ message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost"));
+ message.saveChanges();
+ mail.setMessage(message);
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ // Check the response
+ MimeMultipart content = (MimeMultipart) result.getContent();
+ assertEquals(1, content.getCount());
+ BodyPart part = content.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("NO \"Missing argument: script content\"", response);
+ }
+
+ // No script name
+ {
+ message = new MimeMessage(Session.getDefaultInstance(new Properties()));
+ message.setSubject("PUTSCRIPT");
+ message.setSender(new InternetAddress("test@localhost"));
+ message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost"));
+ message.saveChanges();
+ mail.setMessage(message);
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ // Check the response
+ MimeMultipart content = (MimeMultipart) result.getContent();
+ assertEquals(1, content.getCount());
+ BodyPart part = content.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("NO \"Missing argument: script name\"", response);
+ }
+ }
+
+ @Test
+ public final void testGetScript() throws MessagingException, IOException, UserNotFoundException, StorageException, QuotaExceededException, DuplicateUserException {
+ String scriptName = "scriptName";
+ String scriptContent = "line1\r\nline2";
+ String user = "test@localhost";
+ _repository.addUser(user);
+ _repository.putScript(user, scriptName, scriptContent);
+ MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties()));
+ message.setSubject("GETSCRIPT \"" + scriptName + "\"");
+ message.setSender(new InternetAddress(user));
+ message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost"));
+ message.saveChanges();
+ Mail mail = new MockMail();
+ mail.setMessage(message);
+
+ // Unauthorised
+ {
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ assertNotNull(result);
+ // Check the subject header
+ assertEquals("Re: GETSCRIPT \"" + scriptName + "\"", result.getSubject());
+ // Check the recipient
+ Address[] recipients = result.getRecipients(RecipientType.TO);
+ assertEquals(1, recipients.length);
+ assertEquals(message.getSender(), recipients[0]);
+ // Check the response
+ MimeMultipart multipart = (MimeMultipart) result.getContent();
+ assertEquals(1, multipart.getCount());
+ BodyPart part = multipart.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("NO", response);
+ }
+
+ // Authorised
+ {
+ mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, user);
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ // Check the response
+ MimeMultipart multipart = (MimeMultipart) result.getContent();
+ assertEquals(2, multipart.getCount());
+ BodyPart part = multipart.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("OK", response);
+ BodyPart part2 = multipart.getBodyPart(1);
+ String script = null;
+ Scanner scanner = null;
+ try {
+ scanner = new Scanner((InputStream) part2.getContent(), "UTF-8").useDelimiter("\\A");
+ script = scanner.next();
+ } finally {
+ if (null != scanner) {
+ scanner.close();
+ }
+ }
+ assertEquals(scriptContent, script);
+ }
+
+ // Extra arguments
+ {
+ message.setSubject("GETSCRIPT \"" + scriptName + "\" extra");
+ message.saveChanges();
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ MimeMultipart content = (MimeMultipart) result.getContent();
+ assertEquals(1, content.getCount());
+ BodyPart part = content.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("NO \"Too many arguments: extra\"", response);
+ }
+
+ // No such script
+ {
+ message = new MimeMessage(Session.getDefaultInstance(new Properties()));
+ message.setSubject("GETSCRIPT \"" + scriptName + "X\"");
+ message.setSender(new InternetAddress(user));
+ message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost"));
+ message.saveChanges();
+ mail.setMessage(message);
+ mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, user);
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ // Check the response
+ MimeMultipart multipart = (MimeMultipart) result.getContent();
+ assertEquals(1, multipart.getCount());
+ BodyPart part = multipart.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("NO (NONEXISTENT) \"There is no script by that name\"", response);
+ }
+
+ // No such user
+ {
+ message = new MimeMessage(Session.getDefaultInstance(new Properties()));
+ message.setSubject("GETSCRIPT \"" + scriptName + "\"");
+ message.setSender(new InternetAddress(user + "X"));
+ message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost"));
+ message.saveChanges();
+ mail.setMessage(message);
+ mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, user);
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ // Check the response
+ MimeMultipart multipart = (MimeMultipart) result.getContent();
+ assertEquals(1, multipart.getCount());
+ BodyPart part = multipart.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("NO (NONEXISTENT) \"There is no script by that name\"", response);
+ }
+
+ // No script name
+ {
+ message = new MimeMessage(Session.getDefaultInstance(new Properties()));
+ message.setSubject("GETSCRIPT");
+ message.setSender(new InternetAddress(user));
+ message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost"));
+ message.saveChanges();
+ mail.setMessage(message);
+ mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, user);
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ // Check the response
+ MimeMultipart multipart = (MimeMultipart) result.getContent();
+ assertEquals(1, multipart.getCount());
+ BodyPart part = multipart.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("NO \"Missing argument: script name\"", response);
+ }
+
+ }
+
+
+ @Test
+ public final void testCheckScript() throws MessagingException, IOException, UserNotFoundException, ScriptNotFoundException {
+ MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties()));
+ String scriptName = "scriptName";
+ String scriptContent = "scriptContent";
+ message.setSubject("CHECKSCRIPT");
+ message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost"));
+ message.setSender(new InternetAddress("test@localhost"));
+ message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost"));
+ MimeMultipart multipart = new MimeMultipart();
+ MimeBodyPart scriptPart = new MimeBodyPart();
+ scriptPart.setDataHandler(
+ new DataHandler(
+ new ByteArrayDataSource(
+ scriptContent,
+ "application/sieve; charset=UTF-8")
+ ));
+ scriptPart.setHeader("Content-Type", "application/sieve; charset=UTF-8");
+ scriptPart.setDisposition(MimeBodyPart.ATTACHMENT);
+ scriptPart.setFileName(scriptName);
+ multipart.addBodyPart(scriptPart);
+ message.setContent(multipart);
+ message.saveChanges();
+ Mail mail = new MockMail();
+ mail.setMessage(message);
+
+ // Unauthorised
+ {
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ assertNotNull(result);
+ // Check the subject header
+ assertEquals("Re: CHECKSCRIPT", result.getSubject());
+ // Check the recipient
+ Address[] recipients = result.getRecipients(RecipientType.TO);
+ assertEquals(1, recipients.length);
+ assertEquals(message.getSender(), recipients[0]);
+ // Check the response
+ MimeMultipart content = (MimeMultipart) result.getContent();
+ assertEquals(1, content.getCount());
+ BodyPart part = content.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("NO", response.trim());
+ }
+
+ // Authorised
+ {
+ mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, message.getSender().toString());
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ // Check the response
+ MimeMultipart content = (MimeMultipart) result.getContent();
+ assertEquals(1, content.getCount());
+ BodyPart part = content.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("OK (WARNINGS) \"warning1\" \"warning2\"", response);
+ }
+
+ // Extra arguments should be rejected
+ {
+ message.setSubject("CHECKSCRIPT extra");
+ message.saveChanges();
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ MimeMultipart content = (MimeMultipart) result.getContent();
+ assertEquals(1, content.getCount());
+ BodyPart part = content.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("NO \"Too many arguments: extra\"", response);
+ }
+
+ // Syntax Error
+ {
+ message = new MimeMessage(Session.getDefaultInstance(new Properties()));
+ message.setSubject("CHECKSCRIPT");
+ message.setSender(new InternetAddress("test@localhost"));
+ message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost"));
+ multipart = new MimeMultipart();
+ scriptPart = new MimeBodyPart();
+ scriptPart.setDataHandler(
+ new DataHandler(
+ new ByteArrayDataSource(
+ "SyntaxException",
+ "application/sieve; charset=UTF-8")
+ ));
+ scriptPart.setHeader("Content-Type", "application/sieve; charset=UTF-8");
+ scriptPart.setDisposition(MimeBodyPart.ATTACHMENT);
+ scriptPart.setFileName(scriptName);
+ multipart.addBodyPart(scriptPart);
+ message.setContent(multipart);
+ message.saveChanges();
+ mail.setMessage(message);
+ mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, message.getSender().toString());
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ // Check the response
+ MimeMultipart content = (MimeMultipart) result.getContent();
+ assertEquals(1, content.getCount());
+ BodyPart part = content.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertTrue(response.startsWith("NO \"Syntax Error: "));
+ }
+
+ // No script
+ {
+ message = new MimeMessage(Session.getDefaultInstance(new Properties()));
+ message.setSubject("CHECKSCRIPT");
+ message.setSender(new InternetAddress("test@localhost"));
+ message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost"));
+ message.saveChanges();
+ mail.setMessage(message);
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ // Check the response
+ MimeMultipart content = (MimeMultipart) result.getContent();
+ assertEquals(1, content.getCount());
+ BodyPart part = content.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("NO \"Script part not found in this message\"", response);
+ }
+
+ }
+
+ @Test
+ public final void testDeleteScript() throws DuplicateUserException, StorageException, UserNotFoundException, QuotaExceededException, MessagingException, IOException {
+ String scriptName = "scriptName";
+ String scriptContent = "line1\r\nline2";
+ String user = "test@localhost";
+ _repository.addUser(user);
+ _repository.putScript(user, scriptName, scriptContent);
+ MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties()));
+ message.setSubject("DELETESCRIPT \"" + scriptName + "\"");
+ message.setSender(new InternetAddress(user));
+ message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost"));
+ message.saveChanges();
+ Mail mail = new MockMail();
+ mail.setMessage(message);
+
+ // Unauthorised
+ {
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ assertNotNull(result);
+ // Check the subject header
+ assertEquals("Re: DELETESCRIPT \"" + scriptName + "\"", result.getSubject());
+ // Check the recipient
+ Address[] recipients = result.getRecipients(RecipientType.TO);
+ assertEquals(1, recipients.length);
+ assertEquals(message.getSender(), recipients[0]);
+ // Check the response
+ MimeMultipart content = (MimeMultipart) result.getContent();
+ assertEquals(1, content.getCount());
+ BodyPart part = content.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("NO", response.trim());
+ }
+
+ // Authorised
+ {
+ mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, message.getSender().toString());
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ // Check the response
+ MimeMultipart content = (MimeMultipart) result.getContent();
+ assertEquals(1, content.getCount());
+ BodyPart part = content.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("OK", response.trim());
+ }
+
+ // Extra arguments
+ {
+ message.setSubject("DELETESCRIPT \"" + scriptName + "\" extra");
+ message.saveChanges();
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ MimeMultipart content = (MimeMultipart) result.getContent();
+ assertEquals(1, content.getCount());
+ BodyPart part = content.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("NO \"Too many arguments: extra\"", response);
+ }
+
+ // No script name
+ {
+ message.setSubject("DELETESCRIPT");
+ message.saveChanges();
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ // Check the response
+ MimeMultipart content = (MimeMultipart) result.getContent();
+ assertEquals(1, content.getCount());
+ BodyPart part = content.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("NO \"Missing argument: script name\"", response.trim());
+ }
+
+ }
+
+ @Test
+ public final void testHaveSpace() throws DuplicateUserException, StorageException, UserNotFoundException, QuotaExceededException, MessagingException, IOException {
+ String scriptName = "scriptName";
+ String scriptContent = "line1\r\nline2";
+ String user = "test@localhost";
+ _repository.addUser(user);
+ _repository.putScript(user, scriptName, scriptContent);
+ MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties()));
+ message.setSubject("HAVESPACE \"" + scriptName + "\" 1");
+ message.setSender(new InternetAddress(user));
+ message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost"));
+ message.saveChanges();
+ Mail mail = new MockMail();
+ mail.setMessage(message);
+
+ // Unauthorised
+ {
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ assertNotNull(result);
+ // Check the subject header
+ assertEquals("Re: HAVESPACE \"" + scriptName + "\" 1", result.getSubject());
+ // Check the recipient
+ Address[] recipients = result.getRecipients(RecipientType.TO);
+ assertEquals(1, recipients.length);
+ assertEquals(message.getSender(), recipients[0]);
+ // Check the response
+ MimeMultipart content = (MimeMultipart) result.getContent();
+ assertEquals(1, content.getCount());
+ BodyPart part = content.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("NO", response.trim());
+ }
+
+ // Authorised
+ {
+ mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, message.getSender().toString());
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ // Check the response
+ MimeMultipart content = (MimeMultipart) result.getContent();
+ assertEquals(1, content.getCount());
+ BodyPart part = content.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("OK", response.trim());
+ }
+
+ // Extra arguments
+ {
+ message.setSubject("HAVESPACE \"" + scriptName + "\" 1 extra");
+ message.saveChanges();
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ MimeMultipart content = (MimeMultipart) result.getContent();
+ assertEquals(1, content.getCount());
+ BodyPart part = content.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("NO \"Too many arguments: extra\"", response);
+ }
+
+ // No script name
+ {
+ message.setSubject("HAVESPACE");
+ message.saveChanges();
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ // Check the response
+ MimeMultipart content = (MimeMultipart) result.getContent();
+ assertEquals(1, content.getCount());
+ BodyPart part = content.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("NO \"Missing argument: script name\"", response.trim());
+ }
+
+ // No script size
+ {
+ message.setSubject("HAVESPACE \"" + scriptName + "\"");
+ message.saveChanges();
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ // Check the response
+ MimeMultipart content = (MimeMultipart) result.getContent();
+ assertEquals(1, content.getCount());
+ BodyPart part = content.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("NO \"Missing argument: script size\"", response.trim());
+ }
+
+ // Invalid script size
+ {
+ message.setSubject("HAVESPACE \"" + scriptName + "\" X");
+ message.saveChanges();
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ // Check the response
+ MimeMultipart content = (MimeMultipart) result.getContent();
+ assertEquals(1, content.getCount());
+ BodyPart part = content.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("NO \"Invalid argument: script size\"", response.trim());
+ }
+
+ }
+
+ @Test
+ public final void testListScripts() throws MessagingException, DuplicateUserException, StorageException, UserNotFoundException, QuotaExceededException, ScriptNotFoundException, IOException {
+ String scriptName1 = "scriptName1";
+ String scriptName2 = "scriptName2";
+ String scriptContent = "line1\r\nline2";
+ String user = "test@localhost";
+ _repository.addUser(user);
+ _repository.putScript(user, scriptName1, scriptContent);
+ _repository.putScript(user, scriptName2, scriptContent);
+ _repository.setActive(user, scriptName2);
+ MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties()));
+ message.setSubject("LISTSCRIPTS");
+ message.setSender(new InternetAddress(user));
+ message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost"));
+ message.saveChanges();
+ Mail mail = new MockMail();
+ mail.setMessage(message);
+
+ // Unauthorised
+ {
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ assertNotNull(result);
+ // Check the subject header
+ assertEquals("Re: LISTSCRIPTS", result.getSubject());
+ // Check the recipient
+ Address[] recipients = result.getRecipients(RecipientType.TO);
+ assertEquals(1, recipients.length);
+ assertEquals(message.getSender(), recipients[0]);
+ // Check the response
+ MimeMultipart content = (MimeMultipart) result.getContent();
+ assertEquals(1, content.getCount());
+ BodyPart part = content.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("NO", response.trim());
+ }
+
+ // Authorised
+ {
+ mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, message.getSender().toString());
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ // Check the response
+ MimeMultipart content = (MimeMultipart) result.getContent();
+ assertEquals(1, content.getCount());
+ BodyPart part = content.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("\"scriptName2\" ACTIVE\r\n\"scriptName1\"\r\nOK", response.trim());
+ }
+
+ // Extra arguments
+ {
+ message.setSubject("LISTSCRIPTS extra");
+ message.saveChanges();
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ MimeMultipart content = (MimeMultipart) result.getContent();
+ assertEquals(1, content.getCount());
+ BodyPart part = content.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("NO \"Too many arguments: extra\"", response);
+ }
+
+ }
+
+ @Test
+ public final void testRenameScripts() throws MessagingException, DuplicateUserException, StorageException, UserNotFoundException, QuotaExceededException, IOException {
+ String oldScriptName = "oldScriptName";
+ String newScriptName = "newScriptName";
+ String scriptContent = "line1\r\nline2";
+ String user = "test@localhost";
+ _repository.addUser(user);
+ _repository.putScript(user, oldScriptName, scriptContent);
+ MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties()));
+ message.setSubject("RENAMESCRIPT \"" + oldScriptName + "\" \"" + newScriptName + "\"");
+ message.setSender(new InternetAddress(user));
+ message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost"));
+ message.saveChanges();
+ Mail mail = new MockMail();
+ mail.setMessage(message);
+
+ // Unauthorised
+ {
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ assertNotNull(result);
+ // Check the subject header
+ assertEquals("Re: RENAMESCRIPT \"" + oldScriptName + "\" \"" + newScriptName + "\"", result.getSubject());
+ // Check the recipient
+ Address[] recipients = result.getRecipients(RecipientType.TO);
+ assertEquals(1, recipients.length);
+ assertEquals(message.getSender(), recipients[0]);
+ // Check the response
+ MimeMultipart content = (MimeMultipart) result.getContent();
+ assertEquals(1, content.getCount());
+ BodyPart part = content.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("NO", response.trim());
+ }
+
+ // Authorised
+ {
+ mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, message.getSender().toString());
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ // Check the response
+ MimeMultipart content = (MimeMultipart) result.getContent();
+ assertEquals(1, content.getCount());
+ BodyPart part = content.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("OK", response.trim());
+ }
+
+ // Extra arguments
+ {
+ message.setSubject("RENAMESCRIPT \"" + oldScriptName + "\" \"" + newScriptName + "\" extra");
+ message.saveChanges();
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ MimeMultipart content = (MimeMultipart) result.getContent();
+ assertEquals(1, content.getCount());
+ BodyPart part = content.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("NO \"Too many arguments: extra\"", response);
+ }
+
+ // No script names
+ {
+ message.setSubject("RENAMESCRIPT");
+ message.saveChanges();
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ // Check the response
+ MimeMultipart content = (MimeMultipart) result.getContent();
+ assertEquals(1, content.getCount());
+ BodyPart part = content.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("NO \"Missing argument: old script name\"", response.trim());
+ }
+
+ // No new script name
+ {
+ message.setSubject("RENAMESCRIPT \"" + oldScriptName + "\"");
+ message.saveChanges();
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ // Check the response
+ MimeMultipart content = (MimeMultipart) result.getContent();
+ assertEquals(1, content.getCount());
+ BodyPart part = content.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("NO \"Missing argument: new script name\"", response.trim());
+ }
+
+ }
+
+ @Test
+ public final void testSetActive() throws DuplicateUserException, StorageException, UserNotFoundException, QuotaExceededException, MessagingException, IOException {
+ String scriptName = "scriptName";
+ String scriptContent = "line1\r\nline2";
+ String user = "test@localhost";
+ _repository.addUser(user);
+ _repository.putScript(user, scriptName, scriptContent);
+ MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties()));
+ message.setSubject("SETACTIVE \"" + scriptName + "\"");
+ message.setSender(new InternetAddress(user));
+ message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost"));
+ message.saveChanges();
+ Mail mail = new MockMail();
+ mail.setMessage(message);
+
+ // Unauthorised
+ {
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ assertNotNull(result);
+ // Check the subject header
+ assertEquals("Re: SETACTIVE \"" + scriptName + "\"", result.getSubject());
+ // Check the recipient
+ Address[] recipients = result.getRecipients(RecipientType.TO);
+ assertEquals(1, recipients.length);
+ assertEquals(message.getSender(), recipients[0]);
+ // Check the response
+ MimeMultipart content = (MimeMultipart) result.getContent();
+ assertEquals(1, content.getCount());
+ BodyPart part = content.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("NO", response.trim());
+ }
+
+ // Authorised
+ {
+ mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, message.getSender().toString());
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ // Check the response
+ MimeMultipart content = (MimeMultipart) result.getContent();
+ assertEquals(1, content.getCount());
+ BodyPart part = content.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("OK", response.trim());
+ }
+
+ // Extra arguments
+ {
+ message.setSubject("SETACTIVE \"" + scriptName + "\" extra");
+ message.saveChanges();
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ MimeMultipart content = (MimeMultipart) result.getContent();
+ assertEquals(1, content.getCount());
+ BodyPart part = content.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("NO \"Too many arguments: extra\"", response);
+ }
+
+ // No script name
+ {
+ message.setSubject("SETACTIVE");
+ message.saveChanges();
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ // Check the response
+ MimeMultipart content = (MimeMultipart) result.getContent();
+ assertEquals(1, content.getCount());
+ BodyPart part = content.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("NO \"Missing argument: script name\"", response.trim());
+ }
+
+ // Deactivated
+ {
+ message.setSubject("SETACTIVE \"\"");
+ message.saveChanges();
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ // Check the response
+ MimeMultipart content = (MimeMultipart) result.getContent();
+ assertEquals(1, content.getCount());
+ BodyPart part = content.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("OK", response.trim());
+ boolean thrown = false;
+ try {
+ _repository.getActive(user);
+ } catch (ScriptNotFoundException ex) {
+ thrown = true;
+ }
+ assertTrue("Expected ScriptNotFoundException", thrown);
+ }
+
+ }
+
+ @Test
+ public final void testGetActive() throws MessagingException, UserNotFoundException, ScriptNotFoundException, StorageException, QuotaExceededException, DuplicateUserException, IOException {
+ String scriptName = "scriptName";
+ String scriptContent = "line1\r\nline2";
+ String user = "test@localhost";
+ _repository.addUser(user);
+ _repository.putScript(user, scriptName, scriptContent);
+ _repository.setActive(user, scriptName);
+ MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties()));
+ message.setSubject("GETACTIVE");
+ message.setSender(new InternetAddress(user));
+ message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost"));
+ message.saveChanges();
+ Mail mail = new MockMail();
+ mail.setMessage(message);
+
+ // Unauthorised
+ {
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ assertNotNull(result);
+ // Check the subject header
+ assertEquals("Re: GETACTIVE", result.getSubject());
+ // Check the recipient
+ Address[] recipients = result.getRecipients(RecipientType.TO);
+ assertEquals(1, recipients.length);
+ assertEquals(message.getSender(), recipients[0]);
+ // Check the response
+ MimeMultipart multipart = (MimeMultipart) result.getContent();
+ assertEquals(1, multipart.getCount());
+ BodyPart part = multipart.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("NO", response);
+ }
+
+ // Authorised
+ {
+ mail.setAttribute(ManageSieveMailet.SMTP_AUTH_USER_ATTRIBUTE_NAME, user);
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ // Check the response
+ MimeMultipart multipart = (MimeMultipart) result.getContent();
+ assertEquals(2, multipart.getCount());
+ BodyPart part = multipart.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("OK", response);
+ BodyPart part2 = multipart.getBodyPart(1);
+ String script = null;
+ Scanner scanner = null;
+ try {
+ scanner = new Scanner((InputStream) part2.getContent(), "UTF-8").useDelimiter("\\A");
+ script = scanner.next();
+ } finally {
+ if (null != scanner) {
+ scanner.close();
+ }
+ }
+ assertEquals(scriptContent, script);
+ }
+
+ // Extra arguments
+ {
+ message.setSubject("GETACTIVE extra");
+ message.saveChanges();
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ MimeMultipart content = (MimeMultipart) result.getContent();
+ assertEquals(1, content.getCount());
+ BodyPart part = content.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("NO \"Too many arguments: extra\"", response);
+ }
+
+ // Deactivated
+ {
+ _repository.setActive(user, "");
+ message.setSubject("GETACTIVE");
+ message.saveChanges();
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ // Check the response
+ MimeMultipart content = (MimeMultipart) result.getContent();
+ assertEquals(1, content.getCount());
+ BodyPart part = content.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertTrue(response.trim().startsWith("NO (NONEXISTENT)"));
+ }
+
+ }
+
+ @Ignore("Ignore this test as it depends of your environment (file path changes with your position in the project)")
+ @Test
+ public final void testHelp() throws MessagingException, IOException {
+ String user = "test@localhost";
+ MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties()));
+ message.setSubject("HELP");
+ message.setSender(new InternetAddress(user));
+ message.setRecipient(RecipientType.TO, new InternetAddress("sieve@localhost"));
+ message.saveChanges();
+ Mail mail = new MockMail();
+ mail.setMessage(message);
+
+ // Explicit invocation
+ {
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ assertNotNull(result);
+ // Check the subject header
+ assertEquals("Re: HELP", result.getSubject());
+ // Check the recipient
+ Address[] recipients = result.getRecipients(RecipientType.TO);
+ assertEquals(1, recipients.length);
+ assertEquals(message.getSender(), recipients[0]);
+ // Check the response
+ MimeMultipart multipart = (MimeMultipart) result.getContent();
+ assertEquals(1, multipart.getCount());
+ BodyPart part = multipart.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("Help text", response);
+ }
+
+ // Extra arguments
+ {
+ message.setSubject("HELP extra");
+ message.saveChanges();
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ MimeMultipart content = (MimeMultipart) result.getContent();
+ assertEquals(1, content.getCount());
+ BodyPart part = content.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("Help text", response);
+ }
+
+ // Implicit invocation - no subject header
+ {
+ message.removeHeader("subject");
+ message.saveChanges();
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ assertNotNull(result);
+ // Check the subject header
+ assertEquals(null, result.getSubject());
+ // Check the response
+ MimeMultipart multipart = (MimeMultipart) result.getContent();
+ assertEquals(1, multipart.getCount());
+ BodyPart part = multipart.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("Help text", response);
+ }
+
+ // Implicit invocation - empty subject
+ {
+ message.setSubject("");
+ message.saveChanges();
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ assertNotNull(result);
+ // Check the subject header
+ // Javamail returns "Re: " instead Geronimo returns "Re:" (no trailing space)
+ assertEquals("Re:", result.getSubject().trim());
+ // Check the response
+ MimeMultipart multipart = (MimeMultipart) result.getContent();
+ assertEquals(1, multipart.getCount());
+ BodyPart part = multipart.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("Help text", response);
+ }
+
+ // Implicit invocation - invalid command
+ {
+ message.setSubject("INVALID");
+ message.saveChanges();
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext) _mailet.getMailetContext()).getMessage();
+ assertNotNull(result);
+ // Check the subject header
+ assertEquals("Re: INVALID", result.getSubject());
+ // Check the response
+ MimeMultipart multipart = (MimeMultipart) result.getContent();
+ assertEquals(1, multipart.getCount());
+ BodyPart part = multipart.getBodyPart(0);
+ String response = (String) part.getContent();
+ assertEquals("Help text", response);
+ }
+ }
+
+ /*
+ @Test
+ public final void testMessageWrap() throws MessagingException, IOException {
+ MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties()));
+ message.setSubject("CAPABILITY");
+ message.setSender(new InternetAddress("test@localhost"));
+ message.saveChanges();
+ Mail mail = new MockMail();
+ mail.setMessage(message);
+
+ _parser.setExtensions(Arrays.asList(new String[]{"a","b","c"}));
+
+ _mailet.service(mail);
+ MimeMessage result = ((MockMailetContext)_mailet.getMailetContext()).getMessage();
+ MimeMessageWrapper wrapped = new MimeMessageWrapper(result);
+ }
+ */
+}
Added: james/project/trunk/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/managesieve/MockMail.java
URL: http://svn.apache.org/viewvc/james/project/trunk/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/managesieve/MockMail.java?rev=1716453&view=auto
==============================================================================
--- james/project/trunk/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/managesieve/MockMail.java (added)
+++ james/project/trunk/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/managesieve/MockMail.java Wed Nov 25 16:02:07 2015
@@ -0,0 +1,227 @@
+/*
+ * 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.managesieve;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import javax.mail.MessagingException;
+import javax.mail.internet.AddressException;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeMessage;
+
+import org.apache.mailet.Mail;
+import org.apache.mailet.MailAddress;
+
+/**
+ * <code>MockMail</code>
+ */
+public class MockMail implements Mail {
+
+ private static final long serialVersionUID = 6535523029509031395L;
+
+ MimeMessage _message = null;
+ Map<String, Serializable> _attributes = new HashMap<String, Serializable>();
+
+ /**
+ * @see Mail#getAttribute(String)
+ */
+ public Serializable getAttribute(String arg0) {
+ return _attributes.get(arg0);
+ }
+
+ /**
+ * @see Mail#getAttributeNames()
+ */
+ @SuppressWarnings("unchecked")
+ public Iterator getAttributeNames() {
+ return _attributes.keySet().iterator();
+ }
+
+ /**
+ * @see Mail#getErrorMessage()
+ */
+ public String getErrorMessage() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /**
+ * @see Mail#getLastUpdated()
+ */
+ public Date getLastUpdated() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /**
+ * @see Mail#getMessage()
+ */
+ public MimeMessage getMessage() throws MessagingException {
+ return _message;
+ }
+
+ /**
+ * @see Mail#getMessageSize()
+ */
+ public long getMessageSize() throws MessagingException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ /**
+ * @see Mail#getName()
+ */
+ public String getName() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /**
+ * @see Mail#getRecipients()
+ */
+ @SuppressWarnings("unchecked")
+ public Collection getRecipients() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /**
+ * @see Mail#getRemoteAddr()
+ */
+ public String getRemoteAddr() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /**
+ * @see Mail#getRemoteHost()
+ */
+ public String getRemoteHost() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /**
+ * @see Mail#getSender()
+ */
+ public MailAddress getSender() {
+ MailAddress addr = null;
+ try {
+ addr = new MailAddress((InternetAddress)_message.getSender());
+ } catch (AddressException ex) {
+ } catch (MessagingException ex) {
+ }
+ return addr;
+ }
+
+ /**
+ * @see Mail#getState()
+ */
+ public String getState() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /**
+ * @see Mail#hasAttributes()
+ */
+ public boolean hasAttributes() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ /**
+ * @see Mail#removeAllAttributes()
+ */
+ public void removeAllAttributes() {
+ // TODO Auto-generated method stub
+
+ }
+
+ /**
+ * @see Mail#removeAttribute(String)
+ */
+ public Serializable removeAttribute(String arg0) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /**
+ * @see Mail#setAttribute(String, Serializable)
+ */
+ public Serializable setAttribute(String arg0, Serializable arg1) {
+ return _attributes.put(arg0, arg1);
+ }
+
+ /**
+ * @see Mail#setErrorMessage(String)
+ */
+ public void setErrorMessage(String arg0) {
+ // TODO Auto-generated method stub
+
+ }
+
+ /**
+ * @see Mail#setLastUpdated(Date)
+ */
+ public void setLastUpdated(Date arg0) {
+ // TODO Auto-generated method stub
+
+ }
+
+ /**
+ * @see Mail#setMessage(MimeMessage)
+ */
+ public void setMessage(MimeMessage arg0) {
+ _message = arg0;
+ }
+
+ /**
+ * @see Mail#setName(String)
+ */
+ public void setName(String arg0) {
+ // TODO Auto-generated method stub
+
+ }
+
+ /**
+ * @see Mail#setRecipients(Collection)
+ */
+ @SuppressWarnings("unchecked")
+ public void setRecipients(Collection arg0) {
+ // TODO Auto-generated method stub
+
+ }
+
+ /**
+ * @see Mail#setState(String)
+ */
+ public void setState(String arg0) {
+ // TODO Auto-generated method stub
+
+ }
+
+}
Added: james/project/trunk/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/managesieve/MockMailetConfig.java
URL: http://svn.apache.org/viewvc/james/project/trunk/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/managesieve/MockMailetConfig.java?rev=1716453&view=auto
==============================================================================
--- james/project/trunk/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/managesieve/MockMailetConfig.java (added)
+++ james/project/trunk/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/managesieve/MockMailetConfig.java Wed Nov 25 16:02:07 2015
@@ -0,0 +1,83 @@
+/*
+ * 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.managesieve;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.apache.mailet.MailetConfig;
+import org.apache.mailet.MailetContext;
+
+/**
+ * <code>MockMailetConfig</code>
+ */
+public class MockMailetConfig implements MailetConfig {
+
+ private MailetContext _context = null;
+
+ private Map<String, String> _parameters = null;
+
+ /**
+ * Creates a new instance of MockMailetConfig.
+ *
+ * @param context
+ */
+ public MockMailetConfig(MailetContext context) {
+ super();
+ _context = context;
+ _parameters = new HashMap<String, String>();
+ }
+
+ /**
+ * @see MailetConfig#getInitParameter(String)
+ */
+ public String getInitParameter(String s) {
+ return _parameters.get(s);
+ }
+
+ public void setInitParameter(String k, String v) {
+ _parameters.put(k, v);
+ }
+
+ /**
+ * @see MailetConfig#getInitParameterNames()
+ */
+ @SuppressWarnings("unchecked")
+ public Iterator getInitParameterNames() {
+ return _parameters.keySet().iterator();
+ }
+
+ /**
+ * @see MailetConfig#getMailetContext()
+ */
+ public MailetContext getMailetContext() {
+ return _context;
+ }
+
+ /**
+ * @see MailetConfig#getMailetName()
+ */
+ public String getMailetName() {
+ return "";
+ }
+
+}
Added: james/project/trunk/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/managesieve/MockMailetContext.java
URL: http://svn.apache.org/viewvc/james/project/trunk/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/managesieve/MockMailetContext.java?rev=1716453&view=auto
==============================================================================
--- james/project/trunk/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/managesieve/MockMailetContext.java (added)
+++ james/project/trunk/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/managesieve/MockMailetContext.java Wed Nov 25 16:02:07 2015
@@ -0,0 +1,173 @@
+/*
+ * 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.managesieve;
+
+import org.apache.mailet.LookupException;
+import org.apache.mailet.Mail;
+import org.apache.mailet.MailAddress;
+import org.apache.mailet.MailetContext;
+
+import javax.mail.MessagingException;
+import javax.mail.internet.MimeMessage;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+public class MockMailetContext implements MailetContext {
+
+ private MimeMessage _message = null;
+
+ @Override
+ public void bounce(Mail mail, String s) throws MessagingException {
+ throw new UnsupportedOperationException("Not yet implemented!");
+ }
+
+ @Override
+ public void bounce(Mail mail, String s, MailAddress mailaddress) throws MessagingException {
+ throw new UnsupportedOperationException("Not yet implemented!");
+ }
+
+ @Override
+ public List<String> dnsLookup(String s, RecordType recordType) throws LookupException {
+ throw new UnsupportedOperationException("Not yet implemented!");
+ }
+
+ @Override
+ public Object getAttribute(String s) {
+ throw new UnsupportedOperationException("Not yet implemented!");
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public Iterator getAttributeNames() {
+ throw new UnsupportedOperationException("Not yet implemented!");
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public Collection getMailServers(String s) {
+ throw new UnsupportedOperationException("Not yet implemented!");
+ }
+
+ @Override
+ public int getMajorVersion() {
+ throw new UnsupportedOperationException("Not yet implemented!");
+ }
+
+ @Override
+ public int getMinorVersion() {
+ throw new UnsupportedOperationException("Not yet implemented!");
+ }
+
+ @Override
+ public MailAddress getPostmaster() {
+ throw new UnsupportedOperationException("Not yet implemented!");
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public Iterator getSMTPHostAddresses(String s) {
+ throw new UnsupportedOperationException("Not yet implemented!");
+ }
+
+ @Override
+ public String getServerInfo() {
+ throw new UnsupportedOperationException("Not yet implemented!");
+ }
+
+ @Override
+ public boolean isLocalEmail(MailAddress mailaddress) {
+ return false;
+ }
+
+ @Override
+ public boolean isLocalServer(String s) {
+ return s.equals("localhost");
+ }
+
+ @Override
+ public boolean isLocalUser(String s) {
+ return false;
+ }
+
+ @Override
+ public void log(String s) {
+ System.out.println(s);
+ }
+
+ @Override
+ public void log(String s, Throwable throwable) {
+ throw new UnsupportedOperationException("Not yet implemented!");
+ }
+
+ @Override
+ public void log(LogLevel logLevel, String s) {
+ throw new UnsupportedOperationException("Not yet implemented!");
+ }
+
+ @Override
+ public void log(LogLevel logLevel, String s, Throwable throwable) {
+ throw new UnsupportedOperationException("Not yet implemented!");
+ }
+
+ @Override
+ public void removeAttribute(String s) {
+ throw new UnsupportedOperationException("Not yet implemented!");
+
+ }
+
+ @Override
+ public void sendMail(MimeMessage mimemessage) throws MessagingException {
+ _message = mimemessage;
+ }
+
+ @Override
+ public void sendMail(Mail mail) throws MessagingException {
+ throw new UnsupportedOperationException("Not yet implemented!");
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public void sendMail(MailAddress mailaddress, Collection collection, MimeMessage mimemessage)
+ throws MessagingException {
+ throw new UnsupportedOperationException("Not yet implemented!");
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public void sendMail(MailAddress mailaddress, Collection collection, MimeMessage mimemessage,
+ String s) throws MessagingException {
+ throw new UnsupportedOperationException("Not yet implemented!");
+ }
+
+ @Override
+ public void setAttribute(String s, Object obj) {
+ throw new UnsupportedOperationException("Not yet implemented!");
+ }
+
+ public void storeMail(MailAddress mailaddress, MailAddress mailaddress1, MimeMessage mimemessage) {
+ throw new UnsupportedOperationException("Not yet implemented!");
+ }
+
+ public MimeMessage getMessage() {
+ return _message;
+ }
+
+}
Modified: james/project/trunk/server/pom.xml
URL: http://svn.apache.org/viewvc/james/project/trunk/server/pom.xml?rev=1716453&r1=1716452&r2=1716453&view=diff
==============================================================================
--- james/project/trunk/server/pom.xml (original)
+++ james/project/trunk/server/pom.xml Wed Nov 25 16:02:07 2015
@@ -410,6 +410,13 @@
<artifactId>protocols-managesieve</artifactId>
<version>${protocols.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.james.protocols</groupId>
+ <artifactId>protocols-managesieve</artifactId>
+ <version>${protocols.version}</version>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
<dependency>
<groupId>org.apache.james</groupId>
@@ -869,12 +876,6 @@
<scope>test</scope>
</dependency>
<dependency>
- <groupId>org.assertj</groupId>
- <artifactId>assertj-core</artifactId>
- <version>1.7.1</version>
- <scope>test</scope>
- </dependency>
- <dependency>
<groupId>org.jmock</groupId>
<artifactId>jmock</artifactId>
<version>${jmock.version}</version>
@@ -1294,11 +1295,6 @@
<version>${cucumber.version}</version>
</dependency>
<dependency>
- <groupId>info.cukes</groupId>
- <artifactId>cucumber-picocontainer</artifactId>
- <version>${cucumber.version}</version>
- </dependency>
- <dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-picocontainer</artifactId>
<version>${cucumber.version}</version>
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org