1   /*** 
2    * 
3    * Copyright 2004 Protique Ltd
4    * 
5    * Licensed under the Apache License, Version 2.0 (the "License"); 
6    * you may not use this file except in compliance with the License. 
7    * You may obtain a copy of the License at 
8    * 
9    * http://www.apache.org/licenses/LICENSE-2.0
10   * 
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS, 
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
14   * See the License for the specific language governing permissions and 
15   * limitations under the License. 
16   * 
17   **/
18  package org.codehaus.activemq.config;
19  
20  import junit.framework.TestCase;
21  import org.codehaus.activemq.broker.Broker;
22  import org.codehaus.activemq.broker.BrokerContainer;
23  import org.codehaus.activemq.broker.impl.BrokerConnectorImpl;
24  import org.codehaus.activemq.spring.ActiveMQBeanDefinitionReader;
25  import org.codehaus.activemq.spring.ActiveMQBeanFactory;
26  import org.codehaus.activemq.spring.ActiveMQDtdResolver;
27  import org.codehaus.activemq.spring.SpringBrokerContainerFactory;
28  import org.codehaus.activemq.transport.TransportServerChannel;
29  import org.codehaus.activemq.transport.tcp.TcpTransportServerChannel;
30  import org.codehaus.activemq.transport.vm.VmTransportServerChannel;
31  import org.springframework.beans.factory.xml.XmlBeanFactory;
32  import org.springframework.core.io.ClassPathResource;
33  import org.springframework.core.io.FileSystemResource;
34  import org.springframework.core.io.Resource;
35  import org.w3c.dom.Document;
36  
37  import javax.jms.JMSException;
38  import javax.xml.parsers.DocumentBuilder;
39  import javax.xml.parsers.DocumentBuilderFactory;
40  import javax.xml.transform.Transformer;
41  import javax.xml.transform.dom.DOMSource;
42  import javax.xml.transform.stream.StreamResult;
43  import javax.xml.transform.stream.StreamSource;
44  import java.io.File;
45  import java.util.List;
46  
47  /***
48   * @version $Revision: 1.9 $
49   */
50  public class ConfigTest extends TestCase {
51      public void testConfig() {
52          ActiveMQBeanFactory factory = new ActiveMQBeanFactory("Cheese", new ClassPathResource("org/codehaus/activemq/config/example.xml"));
53  
54          Object value = factory.getBean("broker");
55  
56          assertTrue("Should have created a broker!", value != null);
57          assertTrue("Should be a broker container: " + value, value instanceof BrokerContainer);
58  
59          BrokerContainer container = (BrokerContainer) value;
60          Broker broker = container.getBroker();
61          assertTrue("Should have a broker!", broker != null);
62  
63          assertEquals("Broker name not set!", "localhost", broker.getBrokerName());
64  
65          Object transport = factory.getBean("transport");
66          assertTrue("Made transport", transport != null);
67  
68          List connectors = container.getConnectors();
69          assertEquals("Should have created more connectors", 3, connectors.size());
70  
71          BrokerConnectorImpl connector1 = (BrokerConnectorImpl) connectors.get(0);
72          TransportServerChannel serverChannel1 = connector1.getServerChannel();
73          assertTrue(serverChannel1 instanceof VmTransportServerChannel);
74  
75          BrokerConnectorImpl connector2 = (BrokerConnectorImpl) connectors.get(1);
76          TransportServerChannel serverChannel2 = connector2.getServerChannel();
77          assertTrue(serverChannel2 instanceof TcpTransportServerChannel);
78          TcpTransportServerChannel tcpChannel2 = (TcpTransportServerChannel) serverChannel2;
79          assertEquals("backlog", 1000, tcpChannel2.getBacklog());
80          assertEquals("maxOutstandingMessages", 50, tcpChannel2.getMaxOutstandingMessages());
81          assertTrue("useAsyncSend", tcpChannel2.isUseAsyncSend());
82      }
83  
84      public void testBerkeleyDBConfig() throws JMSException {
85          createBroker(new FileSystemResource("src/sample-conf/bdb-example.xml"));
86  
87          File file = new File("target/berkeleydb");
88          assertTrue("Created the file for the persistent store: " + file, file.exists());
89      }
90  
91  
92      public void testHowlConfig() throws JMSException {
93          createBroker(new FileSystemResource("src/sample-conf/howl-example.xml"));
94  
95          File file = new File("target/howlTest/berkeleydb");
96          assertTrue("Created the file for the persistent store: " + file, file.exists());
97      }
98  
99      public void testJdbmConfig() throws JMSException {
100         createBroker(new FileSystemResource("src/sample-conf/jdbm-example.xml"));
101 
102         File file = new File("target/XmlTest/jdbm");
103         assertTrue("Created the file for the persistent store: " + file, file.exists());
104     }
105 
106     public void testVmConfig() throws JMSException {
107         createBroker(new FileSystemResource("src/sample-conf/vm-example.xml"));
108     }
109 
110     public void testTransform() throws Exception {
111         ClassPathResource resource = new ClassPathResource("org/codehaus/activemq/activemq-to-spring.xsl");
112         StreamSource source = new StreamSource(resource.getInputStream(), resource.getURL().toString());
113         Transformer transformer = ActiveMQBeanDefinitionReader.createTransformer(source);
114 
115         DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
116         builder.setEntityResolver(new ActiveMQDtdResolver());
117         Document document = builder.parse(new ClassPathResource("org/codehaus/activemq/config/example.xml").getFile());
118 
119         transformer.transform(new DOMSource(document), new StreamResult(new File("target/example-spring.xml")));
120     }
121 
122     public void testSpring() throws Exception {
123         XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource("org/codehaus/activemq/config/spring-test.xml"));
124 
125         Object transport = factory.getBean("transport");
126         assertTrue("Made transport", transport != null);
127 
128         System.out.println("Created transport: " + transport);
129     }
130 
131 
132     protected BrokerContainer createBroker(Resource resource) throws JMSException {
133         String brokerName = getName();
134         SpringBrokerContainerFactory factory = new SpringBrokerContainerFactory();
135         factory.setResource(resource);
136         BrokerContainer container = factory.createBrokerContainer(brokerName);
137 
138         assertTrue("Should have a broker container!", container != null);
139 
140         Broker broker = container.getBroker();
141         assertTrue("Should have a broker!", broker != null);
142 
143         assertEquals("Broker name not set!", brokerName, broker.getBrokerName());
144 
145         container.start();
146         container.stop();
147         return container;
148 
149     }
150 }