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.XmlConfigHelper;
22  import org.codehaus.activemq.service.RedeliveryPolicy;
23  import org.codehaus.activemq.broker.Broker;
24  import org.codehaus.activemq.broker.BrokerContainer;
25  import org.codehaus.activemq.broker.BrokerContainerFactory;
26  import org.codehaus.activemq.broker.BrokerContext;
27  import org.codehaus.activemq.broker.impl.BrokerConnectorImpl;
28  import org.codehaus.activemq.security.SecurityAdapter;
29  import org.codehaus.activemq.spring.ActiveMQBeanDefinitionReader;
30  import org.codehaus.activemq.spring.ActiveMQBeanFactory;
31  import org.codehaus.activemq.spring.ActiveMQDtdResolver;
32  import org.codehaus.activemq.spring.SpringBrokerContainerFactory;
33  import org.codehaus.activemq.transport.NetworkChannel;
34  import org.codehaus.activemq.transport.NetworkConnector;
35  import org.codehaus.activemq.transport.TransportServerChannel;
36  import org.codehaus.activemq.transport.tcp.TcpTransportServerChannel;
37  import org.codehaus.activemq.transport.vm.VmTransportServerChannel;
38  import org.springframework.beans.factory.xml.XmlBeanFactory;
39  import org.springframework.core.io.ClassPathResource;
40  import org.springframework.core.io.FileSystemResource;
41  import org.springframework.core.io.Resource;
42  import org.w3c.dom.Document;
43  
44  import javax.jms.JMSException;
45  import javax.xml.parsers.DocumentBuilder;
46  import javax.xml.parsers.DocumentBuilderFactory;
47  import javax.xml.transform.Transformer;
48  import javax.xml.transform.dom.DOMSource;
49  import javax.xml.transform.stream.StreamResult;
50  import javax.xml.transform.stream.StreamSource;
51  import java.io.File;
52  import java.util.List;
53  
54  /***
55   * @version $Revision: 1.17 $
56   */
57  public class ConfigTest extends TestCase {
58      public void testConfig() {
59          ActiveMQBeanFactory factory = new ActiveMQBeanFactory("Cheese", new ClassPathResource("org/codehaus/activemq/config/example.xml"));
60  
61          Object value = factory.getBean("broker");
62  
63          assertTrue("Should have created a broker!", value != null);
64          assertTrue("Should be a broker container: " + value, value instanceof BrokerContainer);
65  
66          BrokerContainer container = (BrokerContainer) value;
67          Broker broker = container.getBroker();
68          assertTrue("Should have a broker!", broker != null);
69  
70          assertEquals("Broker name not set!", "localhost", broker.getBrokerName());
71  
72          Object transport = factory.getBean("transport");
73          assertTrue("Made transport", transport != null);
74  
75          List connectors = container.getTransportConnectors();
76          assertEquals("Should have created more connectors", 3, connectors.size());
77  
78          BrokerConnectorImpl connector1 = (BrokerConnectorImpl) connectors.get(0);
79          TransportServerChannel serverChannel1 = connector1.getServerChannel();
80          assertTrue(serverChannel1 instanceof VmTransportServerChannel);
81  
82          BrokerConnectorImpl connector2 = (BrokerConnectorImpl) connectors.get(1);
83          TransportServerChannel serverChannel2 = connector2.getServerChannel();
84          assertTrue(serverChannel2 instanceof TcpTransportServerChannel);
85          TcpTransportServerChannel tcpChannel2 = (TcpTransportServerChannel) serverChannel2;
86          assertEquals("backlog", 1000, tcpChannel2.getBacklog());
87          assertEquals("maxOutstandingMessages", 50, tcpChannel2.getMaxOutstandingMessages());
88          assertTrue("useAsyncSend", tcpChannel2.isUseAsyncSend());
89  
90  
91          List networkConnectors = container.getNetworkConnectors();
92          assertEquals("Should have a single network connector", 1, networkConnectors.size());
93          NetworkConnector networkConnector = (NetworkConnector) networkConnectors.get(0);
94  
95          List networkChannels = networkConnector.getNetworkChannels();
96          assertEquals("Should have 2 network channels", 2, networkChannels.size());
97  
98          NetworkChannel networkChannel = (NetworkChannel) networkChannels.get(0);
99          assertEquals("URL not equal", "tcp://somehost:61616", networkChannel.getUri());
100         assertEquals("remoteUserName", "James", networkChannel.getRemoteUserName());
101         assertEquals("remotePassword", "Stewey", networkChannel.getRemotePassword());
102 
103         System.out.println("Created network channel: " + networkChannel);
104 
105         SecurityAdapter securityAdapter = broker.getSecurityAdapter();
106         assertTrue("Should have created a security adapter", securityAdapter != null);
107 
108         RedeliveryPolicy redeliveryPolicy = broker.getRedeliveryPolicy();
109         assertTrue("Should have created a redeliveryPolicy", redeliveryPolicy != null);
110         assertEquals("isBackOffMode", true, redeliveryPolicy.isBackOffMode());
111         assertEquals("getMaximumRetryCount", 10, redeliveryPolicy.getMaximumRetryCount());
112     }
113 
114     public void testBerkeleyDBConfig() throws JMSException {
115         createBroker(new FileSystemResource("src/sample-conf/bdb-example.xml"));
116 
117         File file = new File("target/berkeleydb");
118         assertTrue("Created the file for the persistent store: " + file, file.exists());
119     }
120 
121 
122     public void testHowlConfig() throws JMSException {
123         createBroker(new FileSystemResource("src/sample-conf/howl-example.xml"));
124 
125         File file = new File("target/howlTest/berkeleydb");
126         assertTrue("Created the file for the persistent store: " + file, file.exists());
127     }
128 
129     public void testJdbmConfig() throws JMSException {
130         createBroker(new FileSystemResource("src/sample-conf/jdbm-example.xml"));
131 
132         File file = new File("target/XmlTest/jdbm");
133         assertTrue("Created the file for the persistent store: " + file, file.exists());
134     }
135 
136     public void testVmConfig() throws JMSException {
137         createBroker(new FileSystemResource("src/sample-conf/vm-example.xml"));
138     }
139 
140     public void testTransform() throws Exception {
141         ClassPathResource resource = new ClassPathResource("org/codehaus/activemq/activemq-to-spring.xsl");
142         StreamSource source = new StreamSource(resource.getInputStream(), resource.getURL().toString());
143         Transformer transformer = ActiveMQBeanDefinitionReader.createTransformer(source);
144 
145         DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
146         builder.setEntityResolver(new ActiveMQDtdResolver());
147         Document document = builder.parse(new ClassPathResource("org/codehaus/activemq/config/example.xml").getFile());
148 
149         transformer.transform(new DOMSource(document), new StreamResult(new File("target/example-spring.xml")));
150     }
151 
152     public void testSpring() throws Exception {
153         XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource("org/codehaus/activemq/config/spring-test.xml"));
154 
155         Object transport = factory.getBean("transport");
156         assertTrue("Made transport", transport != null);
157 
158         System.out.println("Created transport: " + transport);
159     }
160 
161     public void testXmlConfigHelper() throws Exception {
162         createBroker("file:src/sample-conf/vm-example.xml");
163         createBroker("org/codehaus/activemq/config/config.xml");
164     }
165 
166     protected BrokerContainer createBroker(String resource) throws JMSException {
167         BrokerContainerFactory factory = XmlConfigHelper.createBrokerContainerFactory(resource);
168         return createBroker(factory);
169     }
170 
171     protected BrokerContainer createBroker(Resource resource) throws JMSException {
172         SpringBrokerContainerFactory factory = new SpringBrokerContainerFactory();
173         factory.setResource(resource);
174         return createBroker(factory);
175 
176     }
177 
178     protected BrokerContainer createBroker(BrokerContainerFactory factory) throws JMSException {
179         assertTrue("Factory is null", factory != null);
180         String brokerName = getName();
181         BrokerContainer container = factory.createBrokerContainer(brokerName, BrokerContext.getInstance());
182 
183         assertTrue("Should have a broker container!", container != null);
184 
185         Broker broker = container.getBroker();
186         assertTrue("Should have a broker!", broker != null);
187 
188         assertEquals("Broker name not set!", brokerName, broker.getBrokerName());
189 
190         container.start();
191         container.stop();
192         return container;
193     }
194 }