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 }