Added: james/server/trunk/src/test/org/apache/james/test/mock/james/MockUsersRepository.java URL: http://svn.apache.org/viewcvs/james/server/trunk/src/test/org/apache/james/test/mock/james/MockUsersRepository.java?rev=365388&view=auto ============================================================================== --- james/server/trunk/src/test/org/apache/james/test/mock/james/MockUsersRepository.java (added) +++ james/server/trunk/src/test/org/apache/james/test/mock/james/MockUsersRepository.java Mon Jan 2 10:25:59 2006 @@ -0,0 +1,95 @@ +/*********************************************************************** + * Copyright (c) 2000-2005 The Apache Software Foundation. * + * All rights reserved. * + * ------------------------------------------------------------------- * + * Licensed 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.test.mock.james; + +import org.apache.james.security.DigestUtil; +import org.apache.james.services.User; +import org.apache.james.services.UsersRepository; +import org.apache.james.userrepository.DefaultUser; + +import java.util.HashMap; +import java.util.Iterator; + +public class MockUsersRepository implements UsersRepository { + + private final HashMap m_users = new HashMap(); + + public boolean addUser(User user) { + String key = user.getUserName(); + if (m_users.containsKey(key)) return false; + m_users.put(key, user); + return true; + } + + public void addUser(String name, Object attributes) { + try { + addUser(new DefaultUser(name, DigestUtil.digestString(((String)attributes), "SHA"), "SHA")); + } catch (Exception e) { + e.printStackTrace(); // encoding failed + } + } + + public Object getAttributes(String name) { + return null; // trivial implementation + } + + public User getUserByName(String name) { + return (User) m_users.get(name); + } + + public User getUserByNameCaseInsensitive(String name) { + return null; // trivial implementation + } + + public String getRealName(String name) { + return ((User) m_users.get(name)).getUserName(); + } + + public boolean updateUser(User user) { + return false; // trivial implementation + } + + public void removeUser(String name) { + // trivial implementation + } + + public boolean contains(String name) { + return m_users.containsKey(name); + } + + public boolean containsCaseInsensitive(String name) { + return false; // trivial implementation + } + + public boolean test(String name, Object attributes) { + return false; // trivial implementation + } + + public boolean test(String name, String password) { + User user = getUserByName(name); + if (user == null) return false; + return user.verifyPassword(password); + } + + public int countUsers() { + return m_users.size(); + } + + public Iterator list() { + return m_users.values().iterator(); + } +}
Added: james/server/trunk/src/test/org/apache/james/test/mock/james/MockUsersStore.java URL: http://svn.apache.org/viewcvs/james/server/trunk/src/test/org/apache/james/test/mock/james/MockUsersStore.java?rev=365388&view=auto ============================================================================== --- james/server/trunk/src/test/org/apache/james/test/mock/james/MockUsersStore.java (added) +++ james/server/trunk/src/test/org/apache/james/test/mock/james/MockUsersStore.java Mon Jan 2 10:25:59 2006 @@ -0,0 +1,43 @@ +/*********************************************************************** + * Copyright (c) 2000-2005 The Apache Software Foundation. * + * All rights reserved. * + * ------------------------------------------------------------------- * + * Licensed 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.test.mock.james; + +import org.apache.james.services.UsersStore; +import org.apache.james.services.UsersRepository; + +import java.util.Iterator; +import java.util.ArrayList; + +public class MockUsersStore implements UsersStore { + private UsersRepository m_usersRepository; + + public MockUsersStore(UsersRepository usersRepository) { + m_usersRepository = usersRepository; + } + + public UsersRepository getRepository(String name) { + return m_usersRepository; + } + + public Iterator getRepositoryNames() { + ArrayList repositoryList = new ArrayList(); + repositoryList.add(m_usersRepository); + return repositoryList.iterator(); + } +} Added: james/server/trunk/src/test/org/apache/james/test/mock/javaxmail/MockMimeMessage.java URL: http://svn.apache.org/viewcvs/james/server/trunk/src/test/org/apache/james/test/mock/javaxmail/MockMimeMessage.java?rev=365388&view=auto ============================================================================== --- james/server/trunk/src/test/org/apache/james/test/mock/javaxmail/MockMimeMessage.java (added) +++ james/server/trunk/src/test/org/apache/james/test/mock/javaxmail/MockMimeMessage.java Mon Jan 2 10:25:59 2006 @@ -0,0 +1,468 @@ +/*********************************************************************** + * Copyright (c) 2000-2005 The Apache Software Foundation. * + * All rights reserved. * + * ------------------------------------------------------------------- * + * Licensed 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.test.mock.javaxmail; + +import javax.mail.internet.MimeMessage; +import javax.mail.internet.InternetHeaders; +import javax.mail.internet.InternetAddress; +import javax.mail.*; +import javax.mail.search.SearchTerm; +import javax.activation.DataHandler; +import java.util.*; +import java.io.InputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.io.UnsupportedEncodingException; + +public class MockMimeMessage extends MimeMessage { + + private final List m_fromAddresses = new ArrayList(); + private Address m_senderAddress; + private final List m_toRecepients = new ArrayList(); + private final List m_ccRecepients = new ArrayList(); + private final List m_bccRecepients = new ArrayList(); + private final List m_replyToAddresses = new ArrayList(); + private String m_subject; + private int m_iMessageNumber; + private boolean m_bIsExpunged; + private Object m_content; + private Date m_sentDate; + private String[] m_contentLanguage; + private String m_fileName; + private DataHandler m_dataHandler; + private HashMap m_contentHeaders = new HashMap(); + private Flags m_setFlags = new Flags(); + private boolean m_doMatch; + + public MockMimeMessage() throws MessagingException { + super((Session)null); + } + + public MockMimeMessage(MimeMessage mimeMessage) throws MessagingException { + super(mimeMessage); // trivial implementation + } + + public Address[] getFrom() throws MessagingException { + return (Address[])m_fromAddresses.toArray(); + } + + public void setFrom(Address address) throws MessagingException { + m_fromAddresses.clear(); + m_fromAddresses.add(address); + } + + public void setFrom() throws MessagingException { + m_fromAddresses.clear(); + m_fromAddresses.add(InternetAddress.getLocalAddress(null)); + } + + public void addFrom(Address[] addresses) throws MessagingException { + m_fromAddresses.add(addresses); + } + + public Address getSender() throws MessagingException { + return m_senderAddress; + } + + public void setSender(Address address) throws MessagingException { + m_senderAddress = address; + } + + public Address[] getRecipients(Message.RecipientType recipientType) throws MessagingException { + return (Address[]) getRecipientsList(recipientType).toArray(); + } + + private List getRecipientsList(Message.RecipientType recipientType) { + if (Message.RecipientType.TO.equals(recipientType)) return m_toRecepients; + if (Message.RecipientType.CC.equals(recipientType)) return m_ccRecepients; + if (Message.RecipientType.BCC.equals(recipientType)) return m_bccRecepients; + return null; + } + + public Address[] getAllRecipients() throws MessagingException { + List allRecipients = new ArrayList(); + allRecipients.addAll(m_toRecepients); + allRecipients.addAll(m_ccRecepients); + allRecipients.addAll(m_bccRecepients); + return (Address[]) allRecipients.toArray(); + } + + public void setRecipients(Message.RecipientType recipientType, Address[] addresses) throws MessagingException { + getRecipientsList(recipientType).addAll(Arrays.asList(addresses)); + } + + public void setRecipients(Message.RecipientType recipientType, String recipient) throws MessagingException { + getRecipientsList(recipientType).add(recipient); + } + + public void addRecipients(Message.RecipientType recipientType, Address[] addresses) throws MessagingException { + getRecipientsList(recipientType).addAll(Arrays.asList(addresses)); + } + + public void addRecipients(Message.RecipientType recipientType, String recipient) throws MessagingException { + getRecipientsList(recipientType).add(recipient); + } + + public Address[] getReplyTo() throws MessagingException { + return (Address[]) m_replyToAddresses.toArray(); + } + + public void setReplyTo(Address[] addresses) throws MessagingException { + m_replyToAddresses.addAll(Arrays.asList(addresses)); + } + + public String getSubject() throws MessagingException { + return m_subject; + } + + public void setSubject(String subject) throws MessagingException { + m_subject = subject; + } + + public void setSubject(String subject, String charset) throws MessagingException { + if (subject == null) + { + m_subject = null; + return; + } + try { + m_subject = new String(subject.getBytes(charset)); + } catch (UnsupportedEncodingException e) { + throw new MessagingException("setting subject failed", e); + } + } + + public Date getSentDate() throws MessagingException { + return m_sentDate; + } + + public void setSentDate(Date date) throws MessagingException { + m_sentDate = date; + } + + public Date getReceivedDate() throws MessagingException { + return null; // trivial implementation + } + + public int getSize() throws MessagingException { + return -1; // trivial implementation + } + + public int getLineCount() throws MessagingException { + return -1; // trivial implementation + } + + public String getContentType() throws MessagingException { + return getHeader("Content-Type", null); + } + + public boolean isMimeType(String mimeType) throws MessagingException { + return mimeType.startsWith(getContentType()); + } + + public String getDisposition() throws MessagingException { + return getHeader("Content-Disposition", null); + } + + public void setDisposition(String disposition) throws MessagingException { + setHeader("Content-Disposition", disposition); + } + + public String getEncoding() throws MessagingException { + return getHeader("Content-Transfer-Encoding", null); + } + + public String getContentID() throws MessagingException { + return getHeader("Content-ID", null); + } + + public void setContentID(String contentID) throws MessagingException { + setHeader("Content-ID", contentID); + } + + public String getContentMD5() throws MessagingException { + return getHeader("Content-MD5", null); + } + + public void setContentMD5(String value) throws MessagingException { + setHeader("Content-MD5", value); + } + + public String getDescription() throws MessagingException { + return getHeader("Content-Description", null); + } + + public void setDescription(String description) throws MessagingException { + setHeader("Content-Description", description); + } + + public void setDescription(String description, String charset) throws MessagingException { + try { + setDescription(new String(description.getBytes(charset))); + } catch (UnsupportedEncodingException e) { + throw new MessagingException("setting description failed", e); + } + } + + public String[] getContentLanguage() throws MessagingException { + return m_contentLanguage; + } + + public void setContentLanguage(String[] contentLanguage) throws MessagingException { + m_contentLanguage = contentLanguage; + } + + public String getMessageID() throws MessagingException { + return "ID-" + m_iMessageNumber; // trivial implementation + } + + public String getFileName() throws MessagingException { + return m_fileName; + } + + public void setFileName(String fileName) throws MessagingException { + m_fileName = fileName; + } + + public InputStream getInputStream() throws IOException, MessagingException { + return null; // trivial implementation + } + + protected InputStream getContentStream() throws MessagingException { + return null; // trivial implementation + } + + public InputStream getRawInputStream() throws MessagingException { + return null; // trivial implementation + } + + public synchronized DataHandler getDataHandler() throws MessagingException { + return m_dataHandler; + } + + public synchronized void setDataHandler(DataHandler dataHandler) throws MessagingException { + m_dataHandler = dataHandler; + } + + public Object getContent() throws IOException, MessagingException { + return m_content; + } + + public void setContent(Object object, String mimeType) throws MessagingException { + m_content = object; // trivial implementation + } + + public void setText(String string) throws MessagingException { + setContent(string, "text/plain"); + } + + public void setText(String string, String charset) throws MessagingException { + try { + setContent(new String(string.getBytes(charset)) , "text/plain"); + } catch (UnsupportedEncodingException e) { + throw new MessagingException("setting text content failed", e); + } + } + + public void setContent(Multipart multipart) throws MessagingException { + m_content = multipart; + } + + public Message reply(boolean b) throws MessagingException { + return new MockMimeMessage(this); // trivial implementation + } + + public void writeTo(OutputStream outputStream) throws IOException, MessagingException { + ; // trivial implementation + } + + public void writeTo(OutputStream outputStream, String[] strings) throws IOException, MessagingException { + ; // trivial implementation + } + + public String[] getHeader(String name) throws MessagingException { + String value = (String) m_contentHeaders.get(name); + if (value == null) return null; + return new String[] {value}; + } + + public String getHeader(String name, String delimiter) throws MessagingException { + String[] header = getHeader(name); + if (header.length == 0) return null; + return header[0]; + } + + public void setHeader(String name, String value) throws MessagingException { + addHeader(name, value); + } + + public void addHeader(String name, String value) throws MessagingException { + m_contentHeaders.put(name, value); + } + + public void removeHeader(String name) throws MessagingException { + m_contentHeaders.remove(name); + } + + public Enumeration getAllHeaders() throws MessagingException { + return Collections.enumeration(m_contentHeaders.values()); + } + + public Enumeration getMatchingHeaders(String[] names) throws MessagingException { + ArrayList matchingHeaders = new ArrayList(); + for (int i = 0; i < names.length; i++) { + String name = names[i]; + String value = getHeader(name, null); + if (value == null) continue; + matchingHeaders.add(value); + } + return Collections.enumeration(matchingHeaders); + } + + public Enumeration getNonMatchingHeaders(String[] names) throws MessagingException { + List existingHeaders = Arrays.asList(names); + + ArrayList nonMatchingHeaders = new ArrayList(); + + Iterator iterator = m_contentHeaders.keySet().iterator(); + while (iterator.hasNext()) { + String name = (String) iterator.next(); + if (existingHeaders.contains(name)) continue; + String value = getHeader(name, null); + if (value == null) continue; + nonMatchingHeaders.add(value); + } + return Collections.enumeration(nonMatchingHeaders); + } + + public void addHeaderLine(String headerLine) throws MessagingException { + int separatorIndex = headerLine.indexOf(":"); + if (separatorIndex < 0) throw new MessagingException("header line does not conform to standard"); + + addHeader(headerLine.substring(0,separatorIndex), headerLine.substring(separatorIndex,headerLine.length())); + } + + public Enumeration getAllHeaderLines() throws MessagingException { + return Collections.enumeration(getHeadersAsStrings(m_contentHeaders)); + } + + private ArrayList getHeadersAsStrings(HashMap contentHeaders) { + ArrayList headerLines = new ArrayList(); + Iterator iterator = contentHeaders.keySet().iterator(); + while (iterator.hasNext()) { + String key = (String) iterator.next(); + String value = (String) contentHeaders.get(key); + headerLines.add(key + ":" + value); + } + return headerLines; + } + + public Enumeration getMatchingHeaderLines(String[] names) throws MessagingException { + ArrayList matchingHeaders = new ArrayList(); + for (int i = 0; i < names.length; i++) { + String name = names[i]; + String value = getHeader(name, null); + if (value == null) continue; + matchingHeaders.add(name + ":" + value); + } + return Collections.enumeration(matchingHeaders); + } + + public Enumeration getNonMatchingHeaderLines(String[] names) throws MessagingException { + List existingHeaders = Arrays.asList(names); + + ArrayList nonMatchingHeaders = new ArrayList(); + + Iterator iterator = m_contentHeaders.keySet().iterator(); + while (iterator.hasNext()) { + String name = (String) iterator.next(); + if (existingHeaders.contains(name)) continue; + String value = getHeader(name, null); + if (value == null) continue; + nonMatchingHeaders.add(name + ":" + value); + } + return Collections.enumeration(nonMatchingHeaders); + } + + public synchronized Flags getFlags() throws MessagingException { + return new Flags(m_setFlags); + } + + public synchronized boolean isSet(Flags.Flag flag) throws MessagingException { + return m_setFlags.contains(flag); + } + + public synchronized void setFlags(Flags flags, boolean set) throws MessagingException { + if (set) m_setFlags.add(flags); + else m_setFlags.remove(flags); + } + + public void saveChanges() throws MessagingException { + ; // trivial implementation + } + + protected void updateHeaders() throws MessagingException { + ; // trivial implementation + } + + protected InternetHeaders createInternetHeaders(InputStream inputStream) throws MessagingException { + return new InternetHeaders(); + } + + public void setRecipient(Message.RecipientType recipientType, Address address) throws MessagingException { + setRecipients(recipientType, new Address[]{address}); + } + + public void addRecipient(Message.RecipientType recipientType, Address address) throws MessagingException { + setRecipients(recipientType, new Address[]{address}); + } + + public void setFlag(Flags.Flag flag, boolean set) throws MessagingException { + if (set) m_setFlags.add(flag); + else m_setFlags.remove(flag); + } + + public int getMessageNumber() { + return m_iMessageNumber; + } + + protected void setMessageNumber(int i) { + m_iMessageNumber = i; + } + + public Folder getFolder() { + return null; + } + + public boolean isExpunged() { + return m_bIsExpunged; + } + + protected void setExpunged(boolean b) { + m_bIsExpunged = b; + } + + public void setShouldMatch(boolean doMatch) { + m_doMatch = doMatch; + } + + public boolean match(SearchTerm searchTerm) throws MessagingException { + return m_doMatch; + } +} Added: james/server/trunk/src/test/org/apache/james/test/mock/mailet/MockMailContext.java URL: http://svn.apache.org/viewcvs/james/server/trunk/src/test/org/apache/james/test/mock/mailet/MockMailContext.java?rev=365388&view=auto ============================================================================== --- james/server/trunk/src/test/org/apache/james/test/mock/mailet/MockMailContext.java (added) +++ james/server/trunk/src/test/org/apache/james/test/mock/mailet/MockMailContext.java Mon Jan 2 10:25:59 2006 @@ -0,0 +1,113 @@ +/*********************************************************************** + * Copyright (c) 1999-2005 The Apache Software Foundation. * + * All rights reserved. * + * ------------------------------------------------------------------- * + * Licensed 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.test.mock.mailet; + +import org.apache.mailet.MailetContext; +import org.apache.mailet.Mail; +import org.apache.mailet.MailAddress; + +import javax.mail.MessagingException; +import javax.mail.internet.MimeMessage; +import java.util.Collection; +import java.util.Iterator; + +public class MockMailContext implements MailetContext { + + public void bounce(Mail mail, String message) throws MessagingException { + // trivial implementation + } + + public void bounce(Mail mail, String message, MailAddress bouncer) throws MessagingException { + // trivial implementation + } + + public Collection getMailServers(String host) { + return null; // trivial implementation + } + + public MailAddress getPostmaster() { + return null; // trivial implementation + } + + public Object getAttribute(String name) { + return null; // trivial implementation + } + + public Iterator getAttributeNames() { + return null; // trivial implementation + } + + public int getMajorVersion() { + return 0; // trivial implementation + } + + public int getMinorVersion() { + return 0; // trivial implementation + } + + public String getServerInfo() { + return null; // trivial implementation + } + + public boolean isLocalServer(String serverName) { + return false; // trivial implementation + } + + public boolean isLocalUser(String userAccount) { + return false; // trivial implementation + } + + public void log(String message) { + // trivial implementation + } + + public void log(String message, Throwable t) { + // trivial implementation + } + + public void removeAttribute(String name) { + // trivial implementation + } + + public void sendMail(MimeMessage msg) throws MessagingException { + // trivial implementation + } + + public void sendMail(MailAddress sender, Collection recipients, MimeMessage msg) throws MessagingException { + // trivial implementation + } + + public void sendMail(MailAddress sender, Collection recipients, MimeMessage msg, String state) throws MessagingException { + // trivial implementation + } + + public void sendMail(Mail mail) throws MessagingException { + // trivial implementation + } + + public void setAttribute(String name, Object object) { + // trivial implementation + } + + public void storeMail(MailAddress sender, MailAddress recipient, MimeMessage msg) throws MessagingException { + // trivial implementation + } + + public Iterator getSMTPHostAddresses(String domainName) { + return null; // trivial implementation + } +} Added: james/server/trunk/src/test/org/apache/james/test/util/Util.java URL: http://svn.apache.org/viewcvs/james/server/trunk/src/test/org/apache/james/test/util/Util.java?rev=365388&view=auto ============================================================================== --- james/server/trunk/src/test/org/apache/james/test/util/Util.java (added) +++ james/server/trunk/src/test/org/apache/james/test/util/Util.java Mon Jan 2 10:25:59 2006 @@ -0,0 +1,33 @@ +/*********************************************************************** + * Copyright (c) 1999-2005 The Apache Software Foundation. * + * All rights reserved. * + * ------------------------------------------------------------------- * + * Licensed 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.test.util; + +import org.apache.avalon.framework.configuration.Configuration; +import org.apache.avalon.framework.configuration.DefaultConfiguration; + +public class Util { + + public static int getRandomNonPrivilegedPort() { + return ((int)( Math.random() * 1000) + 3000); + } + + public static Configuration getValuedConfiguration(String name, String value) { + DefaultConfiguration defaultConfiguration = new DefaultConfiguration(name); + defaultConfiguration.setValue(value); + return defaultConfiguration; + } +} Added: james/server/trunk/src/test/org/apache/james/transport/LinearProcessorTest.java URL: http://svn.apache.org/viewcvs/james/server/trunk/src/test/org/apache/james/transport/LinearProcessorTest.java?rev=365388&view=auto ============================================================================== --- james/server/trunk/src/test/org/apache/james/transport/LinearProcessorTest.java (added) +++ james/server/trunk/src/test/org/apache/james/transport/LinearProcessorTest.java Mon Jan 2 10:25:59 2006 @@ -0,0 +1,202 @@ +/*********************************************************************** + * Copyright (c) 1999-2005 The Apache Software Foundation. * + * All rights reserved. * + * ------------------------------------------------------------------- * + * Licensed 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; + +import org.apache.avalon.framework.logger.ConsoleLogger; +import org.apache.avalon.framework.logger.Logger; +import org.apache.james.core.MailImpl; +import org.apache.james.core.MimeMessageInputStreamSource; +import org.apache.james.core.MimeMessageWrapper; +import org.apache.james.test.mock.james.MockSpoolRepository; +import org.apache.james.test.mock.mailet.MockMailContext; +import org.apache.james.transport.mailets.debug.DumpSystemErr; +import org.apache.james.transport.matchers.All; +import org.apache.james.transport.matchers.RecipientIs; +import org.apache.mailet.GenericMailet; +import org.apache.mailet.Mail; +import org.apache.mailet.MailAddress; +import org.apache.mailet.Mailet; +import org.apache.mailet.MailetConfig; +import org.apache.mailet.MailetContext; +import org.apache.mailet.Matcher; +import org.apache.mailet.MatcherConfig; + +import com.sun.mail.util.SharedByteArrayInputStream; + +import javax.mail.MessagingException; +import javax.mail.internet.MimeMessage; +import javax.mail.internet.ParseException; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; + +import junit.framework.TestCase; + +/** + * Currently here as a proof of JAMES-421. + * Fixing code will follow + */ +public class LinearProcessorTest extends TestCase { + Collection c; + LinearProcessor t; + MimeMessage mw = null; + String content = "Subject: test\r\nContent-Transfer-Encoding: plain"; + String sep = "\r\n\r\n"; + String body = "original body\r\n.\r\n"; + MailetContext mockContext = new MockMailContext(); + + public static int counter = 0; + + + + private class CheckerMailet extends GenericMailet { + + public ArrayList receivedMails = new ArrayList(); + + public void service(Mail mail) throws MessagingException { + receivedMails.add(mail); + } + + } + + private MailetConfig mockMailetConfig = new MailetConfig() { + + public String getInitParameter(String name) { + return ""; + } + + public Iterator getInitParameterNames() { + return null; + } + + public MailetContext getMailetContext() { + return mockContext; + } + + public String getMailetName() { + return "Dummy"; + } + + }; + private CheckerMailet checkerMailet; + + private class MyMailet extends GenericMailet { + + public void service(Mail mail) throws MessagingException { + try { + MimeMessage message = mail.getMessage () ; + //Set the header name and value (supplied at init time). + String newText = "new text "+counter++; + System.err.println("Setting body to "+newText); + message.addHeader("x-Header", newText); + message.setText(newText); + message.saveChanges(); + } catch (javax.mail.MessagingException me) { + log (me.getMessage()); + } + } + } + + public LinearProcessorTest(String arg0) throws Exception { + super(arg0); + + MimeMessageInputStreamSource mmis = null; + try { + mmis = new MimeMessageInputStreamSource("test", new SharedByteArrayInputStream((content+sep+body).getBytes())); + } catch (MessagingException e) { + } + mw = new MimeMessageWrapper(mmis); + setUp(); + } + + private class DummyMatcherConfig implements MatcherConfig { + public String getCondition() { + return ""; + } + + public MailetContext getMailetContext() { + return mockContext; + } + + public String getMatcherName() { + return "All"; + } + } + + public void testCopyOnWrite() throws ParseException, IOException { + Collection recipients = new ArrayList(); + recipients.add(new MailAddress("rec1","domain.com")); + recipients.add(new MailAddress("rec2","domain.com")); + try { + MailImpl m = new MailImpl("mail1",new MailAddress("sender","domain.com"),recipients,mw); + t.service(m); + ArrayList a = checkerMailet.receivedMails; + assertEquals(2,a.size()); + MimeMessage m1 = ((Mail) a.get(0)).getMessage(); + MimeMessage m2 = ((Mail) a.get(1)).getMessage(); + assertNotSame(m1,m2); + } catch (MessagingException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public void setUp() throws Exception { + super.setUp(); + t = new LinearProcessor(); + Logger l = new ConsoleLogger(); + t.enableLogging(l); + t.initialize(); + t.setSpool(new MockSpoolRepository()); + Matcher recipientIs = new RecipientIs(); + recipientIs.init(new DummyMatcherConfig() { + + public String getCondition() { + return "[EMAIL PROTECTED]"; + } + + }); + + Matcher all = new All(); + all.init(new DummyMatcherConfig()); + + Mailet changeBody = new MyMailet(); + Mailet changeBody2 = new MyMailet(); + + changeBody.init(mockMailetConfig); + changeBody2.init(mockMailetConfig); + + Mailet dumpSystemErr = new DumpSystemErr(); + changeBody.init(mockMailetConfig); + + checkerMailet = new CheckerMailet(); + t.add(recipientIs,changeBody); + t.add(all,changeBody); + t.add(all,dumpSystemErr); + t.add(all,checkerMailet); + t.closeProcessorLists(); + + } + + public void tearDown() throws Exception { + t.dispose(); + super.tearDown(); + } + +} --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
