Package org.apache.james.transport

Source Code of org.apache.james.transport.LinearProcessorTest$DummyMatcherConfig

/****************************************************************
* 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;

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.MimeMessageCopyOnWriteProxy;
import org.apache.james.core.MimeMessageInputStreamSource;
import org.apache.james.test.mock.james.MockSpoolRepository;
import org.apache.james.test.mock.mailet.MockMailContext;
import org.apache.james.test.mock.mailet.MockMailetConfig;
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 javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import javax.mail.util.SharedByteArrayInputStream;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;

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 {
            Mail m2 = new MailImpl(mail,mail.getName());
            m2.setState(mail.getState());
            receivedMails.add(m2);
        }
       
    }
   
    private MailetConfig mockMailetConfig = new MockMailetConfig("Dummy",mockContext);
   
    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.setSubject(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 MimeMessageCopyOnWriteProxy(mmis);
        setUp();
  }

    private class DummyMatcherConfig implements MatcherConfig {
        private String condition;

        public DummyMatcherConfig(String config) {
            this.condition = config;
        }
        public String getCondition() {
            return condition;
        }
       
        public MailetContext getMailetContext() {
            return mockContext;
        }

        public String getMatcherName() {
            return "All";
        }
    }
   
    public void testCopyOnWrite() throws IOException, MessagingException {
        t.setSpool(new MockSpoolRepository());
        Matcher recipientIs = new RecipientIs();
        recipientIs.init(new DummyMatcherConfig("rec1@domain.com"));
       
        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();

        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);
            assertEquals(m1.getSubject(),"new text 1");
            assertEquals(m2.getSubject(),"new text 2");
            m.dispose();
        } catch (MessagingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public void testStateChange() throws IOException, MessagingException {
        t.setSpool(new MockSpoolRepository() {
            public void store(Mail mc) throws MessagingException {
                assertEquals("MYSTATE",mc.getState());
                super.store(mc);
            }
        });
       
        Matcher recipientIs = new RecipientIs();
        recipientIs.init(new DummyMatcherConfig("rec1@domain.com"));
       
        Matcher all = new All();
        all.init(new DummyMatcherConfig(""));
       
        Mailet dumpSystemErr = new DumpSystemErr();
       
        checkerMailet = new CheckerMailet();
        t.add(recipientIs,dumpSystemErr);
        t.add(all,dumpSystemErr);
        t.add(all,checkerMailet);
        t.closeProcessorLists();

        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);
            m.setState("MYSTATE");
            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);
            assertEquals("MYSTATE",((Mail) a.get(0)).getState());
            assertEquals("MYSTATE",((Mail) a.get(1)).getState());
            m.dispose();
        } 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();
       
    }
   
    public void tearDown() throws Exception {
        t.dispose();
        super.tearDown();
    }
   
}
TOP

Related Classes of org.apache.james.transport.LinearProcessorTest$DummyMatcherConfig

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.