/**
*
* Copyright 2004 The Apache Software Foundation
*
* 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.geronimo.mail;
import java.util.Properties;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.Transport;
import javax.management.ObjectName;
import junit.framework.TestCase;
import org.apache.geronimo.gbean.GBeanData;
import org.apache.geronimo.kernel.KernelFactory;
import org.apache.geronimo.kernel.Kernel;
/**
* @version $Rev$ $Date$
*/
public class MailGBeanTest extends TestCase {
private Kernel kernel;
private ObjectName mailName;
private ObjectName protocolName;
private static final String KERNEL_NAME = "testKernel";
public void testProperties() throws Exception {
Properties properties = new Properties();
properties.put("mail.store.protocol", "testStore");
properties.put("mail.transport.protocol", "testTransport");
mailName = ObjectName.getInstance("geronimo.server:J2EEServer=geronimo,J2EEApplication=null,J2EEType=JavaMailResource,name=default");
GBeanData cmf = new GBeanData(mailName, MailGBean.getGBeanInfo());
cmf.setAttribute("useDefault", new Boolean(true));
cmf.setAttribute("properties", properties);
kernel.loadGBean(cmf, MailGBean.class.getClassLoader());
kernel.startGBean(mailName);
Object proxy = kernel.invoke(mailName, "$getResource");
assertNotNull(proxy);
assertTrue(proxy instanceof Session);
Store store = ((Session) proxy).getStore();
assertNotNull(store);
assertTrue(store instanceof TestStore);
Transport transport = ((Session) proxy).getTransport();
assertNotNull(transport);
assertTrue(transport instanceof TestTransport);
kernel.stopGBean(mailName);
}
public void testDefaultOverrides() throws Exception {
Properties properties = new Properties();
properties.put("mail.store.protocol", "POOKIE");
properties.put("mail.transport.protocol", "BEAR");
mailName = ObjectName.getInstance("geronimo.server:J2EEServer=geronimo,J2EEApplication=null,J2EEType=JavaMailResource,name=default");
GBeanData cmf = new GBeanData(mailName, MailGBean.getGBeanInfo());
cmf.setAttribute("useDefault", new Boolean(true));
cmf.setAttribute("properties", properties);
cmf.setAttribute("storeProtocol", "test");
cmf.setAttribute("transportProtocol", "test");
kernel.loadGBean(cmf, MailGBean.class.getClassLoader());
kernel.startGBean(mailName);
Object proxy = kernel.invoke(mailName, "$getResource");
assertNotNull(proxy);
assertTrue(proxy instanceof Session);
Store store = ((Session) proxy).getStore();
assertNotNull(store);
assertTrue(store instanceof TestStore);
Transport transport = ((Session) proxy).getTransport();
assertNotNull(transport);
assertTrue(transport instanceof TestTransport);
kernel.stopGBean(mailName);
}
public void testSMTPOverrides() throws Exception {
Properties properties = new Properties();
properties.put("mail.store.protocol", "POOKIE");
properties.put("mail.transport.protocol", "BEAR");
properties.put("mail.smtp.ehlo", "true");
mailName = ObjectName.getInstance("geronimo.server:J2EEServer=geronimo,J2EEApplication=null,J2EEType=JavaMailResource,name=default");
GBeanData cmf = new GBeanData(mailName, MailGBean.getGBeanInfo());
cmf.setReferencePattern("Protocols", new ObjectName("geronimo.server:J2EEServer=geronimo,J2EEApplication=null,type=JavaMailProtocol,*"));
cmf.setAttribute("useDefault", new Boolean(true));
cmf.setAttribute("properties", properties);
cmf.setAttribute("storeProtocol", "test");
cmf.setAttribute("transportProtocol", "test");
kernel.loadGBean(cmf, MailGBean.class.getClassLoader());
kernel.startGBean(mailName);
protocolName = ObjectName.getInstance("geronimo.server:J2EEServer=geronimo,J2EEApplication=null,type=JavaMailProtocol,name=smtp");
GBeanData smtp = new GBeanData(protocolName, SMTPTransportGBean.getGBeanInfo());
kernel.loadGBean(smtp, SMTPTransportGBean.class.getClassLoader());
kernel.startGBean(protocolName);
Object proxy = kernel.invoke(mailName, "$getResource");
assertNotNull(proxy);
assertTrue(proxy instanceof Session);
Store store = ((Session) proxy).getStore();
assertNotNull(store);
assertTrue(store instanceof TestStore);
Transport transport = ((Session) proxy).getTransport();
assertNotNull(transport);
assertTrue(transport instanceof TestTransport);
TestTransport testTransport = (TestTransport) transport;
assertFalse(testTransport.isEHLO());
kernel.stopGBean(protocolName);
kernel.stopGBean(mailName);
}
public void testPOP3Overrides() throws Exception {
Properties properties = new Properties();
properties.put("mail.store.protocol", "POOKIE");
properties.put("mail.transport.protocol", "BEAR");
properties.put("mail.pop3.ehlo", "true");
mailName = ObjectName.getInstance("geronimo.server:J2EEServer=geronimo,J2EEApplication=null,J2EEType=JavaMailResource,name=default");
GBeanData cmf = new GBeanData(mailName, MailGBean.getGBeanInfo());
cmf.setReferencePattern("Protocols", new ObjectName("geronimo.server:J2EEServer=geronimo,J2EEApplication=null,type=JavaMailProtocol,*"));
cmf.setAttribute("useDefault", new Boolean(true));
cmf.setAttribute("properties", properties);
cmf.setAttribute("storeProtocol", "test");
cmf.setAttribute("transportProtocol", "test");
kernel.loadGBean(cmf, MailGBean.class.getClassLoader());
kernel.startGBean(mailName);
protocolName = ObjectName.getInstance("geronimo.server:J2EEServer=geronimo,J2EEApplication=null,type=JavaMailProtocol,name=pop3");
GBeanData pop3 = new GBeanData(protocolName, SMTPTransportGBean.getGBeanInfo()); // todo shouldn't this be POP3Store?
kernel.loadGBean(pop3, SMTPTransportGBean.class.getClassLoader());
kernel.startGBean(protocolName);
Object proxy = kernel.invoke(mailName, "$getResource");
assertNotNull(proxy);
assertTrue(proxy instanceof Session);
Store store = ((Session) proxy).getStore();
assertNotNull(store);
assertTrue(store instanceof TestStore);
Transport transport = ((Session) proxy).getTransport();
assertNotNull(transport);
assertTrue(transport instanceof TestTransport);
kernel.stopGBean(protocolName);
kernel.stopGBean(mailName);
}
public void testIMAPOverrides() throws Exception {
Properties properties = new Properties();
properties.put("mail.store.protocol", "POOKIE");
properties.put("mail.transport.protocol", "BEAR");
properties.put("mail.imap.ehlo", "true");
mailName = ObjectName.getInstance("geronimo.server:J2EEServer=geronimo,J2EEApplication=null,J2EEType=JavaMailResource,name=default");
GBeanData cmf = new GBeanData(mailName, MailGBean.getGBeanInfo());
cmf.setReferencePattern("Protocols", new ObjectName("geronimo.server:J2EEServer=geronimo,J2EEApplication=null,type=JavaMailProtocol,*"));
cmf.setAttribute("useDefault", new Boolean(true));
cmf.setAttribute("properties", properties);
cmf.setAttribute("storeProtocol", "testStore");
cmf.setAttribute("transportProtocol", "testTransport");
kernel.loadGBean(cmf, MailGBean.class.getClassLoader());
kernel.startGBean(mailName);
protocolName = ObjectName.getInstance("geronimo.server:J2EEServer=geronimo,J2EEApplication=null,type=JavaMailProtocol,name=imap");
GBeanData imap = new GBeanData(protocolName, IMAPStoreGBean.getGBeanInfo());
kernel.loadGBean(imap, IMAPStoreGBean.class.getClassLoader());
kernel.startGBean(protocolName);
Object proxy = kernel.invoke(mailName, "$getResource");
assertNotNull(proxy);
assertTrue(proxy instanceof Session);
Store store = ((Session) proxy).getStore();
assertNotNull(store);
assertTrue(store instanceof TestStore);
Transport transport = ((Session) proxy).getTransport();
assertNotNull(transport);
assertTrue(transport instanceof TestTransport);
kernel.stopGBean(protocolName);
kernel.stopGBean(mailName);
}
protected void setUp() throws Exception {
kernel = KernelFactory.newInstance().createKernel(KERNEL_NAME);
kernel.boot();
}
protected void tearDown() throws Exception {
kernel.shutdown();
}
}