http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/60979268/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/ConfigTest.java ---------------------------------------------------------------------- diff --git a/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/ConfigTest.java b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/ConfigTest.java new file mode 100644 index 0000000..82b5ebe --- /dev/null +++ b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/ConfigTest.java @@ -0,0 +1,457 @@ +/** + * 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.activemq.config; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.io.File; +import java.sql.Connection; +import java.sql.DatabaseMetaData; +import java.sql.ResultSet; +import java.util.List; + +import javax.jms.JMSException; +import javax.jms.MessageConsumer; +import javax.jms.Session; +import javax.jms.Topic; +import javax.sql.DataSource; + +import org.apache.activemq.ActiveMQConnectionFactory; +import org.apache.activemq.broker.BrokerService; +import org.apache.activemq.broker.TransportConnector; +import org.apache.activemq.broker.region.policy.FixedSizedSubscriptionRecoveryPolicy; +import org.apache.activemq.broker.region.policy.LastImageSubscriptionRecoveryPolicy; +import org.apache.activemq.broker.region.policy.NoSubscriptionRecoveryPolicy; +import org.apache.activemq.broker.region.policy.RoundRobinDispatchPolicy; +import org.apache.activemq.broker.region.policy.SimpleDispatchPolicy; +import org.apache.activemq.broker.region.policy.StrictOrderDispatchPolicy; +import org.apache.activemq.broker.region.policy.SubscriptionRecoveryPolicy; +import org.apache.activemq.broker.region.policy.TimedSubscriptionRecoveryPolicy; +import org.apache.activemq.command.ActiveMQTopic; +import org.apache.activemq.network.NetworkConnector; +import org.apache.activemq.store.PersistenceAdapter; +import org.apache.activemq.store.jdbc.DefaultDatabaseLocker; +import org.apache.activemq.store.jdbc.JDBCPersistenceAdapter; +import org.apache.activemq.store.jdbc.adapter.TransactDatabaseLocker; +import org.apache.activemq.store.journal.JournalPersistenceAdapter; +import org.apache.activemq.store.memory.MemoryPersistenceAdapter; +import org.apache.activemq.transport.tcp.TcpTransportServer; +import org.apache.activemq.usage.SystemUsage; +import org.apache.activemq.xbean.BrokerFactoryBean; +import org.jmock.Expectations; +import org.jmock.Mockery; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.FileSystemResource; +import org.springframework.core.io.Resource; + +public class ConfigTest { + + protected static final String JOURNAL_ROOT = "target/test-data/"; + protected static final String DERBY_ROOT = "target/test-data/"; + protected static final String CONF_ROOT = "src/test/resources/org/apache/activemq/config/sample-conf/"; + private static final Logger LOG = LoggerFactory.getLogger(ConfigTest.class); + + static { + System.setProperty("javax.net.ssl.trustStore", "src/test/resources/client.keystore"); + System.setProperty("javax.net.ssl.trustStorePassword", "password"); + System.setProperty("javax.net.ssl.trustStoreType", "jks"); + System.setProperty("javax.net.ssl.keyStore", "src/test/resources/server.keystore"); + System.setProperty("javax.net.ssl.keyStorePassword", "password"); + System.setProperty("javax.net.ssl.keyStoreType", "jks"); + } + + /* + * IMPORTANT NOTE: Assertions checking for the existence of the derby + * directory will fail if the first derby directory is not created under + * target/test-data/. The test in unable to change the derby root directory + * for succeeding creation. It uses the first created directory as the root. + */ + + /* + * This tests creating a journal persistence adapter using the persistence + * adapter factory bean + */ + @Test + public void testJournaledJDBCConfig() throws Exception { + + File journalFile = new File(JOURNAL_ROOT + "testJournaledJDBCConfig/journal"); + recursiveDelete(journalFile); + + File derbyFile = new File(DERBY_ROOT + "testJournaledJDBCConfig/derbydb"); // Default + recursiveDelete(derbyFile); + + BrokerService broker; + broker = createBroker(new FileSystemResource(CONF_ROOT + "journaledjdbc-example.xml")); + try { + assertEquals("Broker Config Error (brokerName)", "brokerJournaledJDBCConfigTest", broker.getBrokerName()); + + PersistenceAdapter adapter = broker.getPersistenceAdapter(); + + assertTrue("Should have created a journal persistence adapter", adapter instanceof JournalPersistenceAdapter); + assertTrue("Should have created a derby directory at " + derbyFile.getAbsolutePath(), derbyFile.exists()); + assertTrue("Should have created a journal directory at " + journalFile.getAbsolutePath(), journalFile.exists()); + + // Check persistence factory configurations + broker.getPersistenceAdapter(); + + assertTrue(broker.getSystemUsage().getStoreUsage().getStore() instanceof JournalPersistenceAdapter); + + LOG.info("Success"); + } finally { + if (broker != null) { + broker.stop(); + } + } + } + + @Test + public void testJdbcLockConfigOverride() throws Exception { + + JDBCPersistenceAdapter adapter = new JDBCPersistenceAdapter(); + Mockery context = new Mockery(); + final DataSource dataSource = context.mock(DataSource.class); + final Connection connection = context.mock(Connection.class); + final DatabaseMetaData metadata = context.mock(DatabaseMetaData.class); + final ResultSet result = context.mock(ResultSet.class); + adapter.setDataSource(dataSource); + adapter.setCreateTablesOnStartup(false); + + context.checking(new Expectations() {{ + allowing(dataSource).getConnection(); + will(returnValue(connection)); + allowing(connection).getMetaData(); + will(returnValue(metadata)); + allowing(connection); + allowing(metadata).getDriverName(); + will(returnValue("Microsoft_SQL_Server_2005_jdbc_driver")); + allowing(result).next(); + will(returnValue(true)); + }}); + + adapter.start(); + assertTrue("has the locker override", adapter.getLocker() instanceof TransactDatabaseLocker); + adapter.stop(); + } + + public void testJdbcLockConfigDefault() throws Exception { + + JDBCPersistenceAdapter adapter = new JDBCPersistenceAdapter(); + Mockery context = new Mockery(); + final DataSource dataSource = context.mock(DataSource.class); + final Connection connection = context.mock(Connection.class); + final DatabaseMetaData metadata = context.mock(DatabaseMetaData.class); + final ResultSet result = context.mock(ResultSet.class); + adapter.setDataSource(dataSource); + adapter.setCreateTablesOnStartup(false); + + context.checking(new Expectations() {{ + allowing(dataSource).getConnection(); + will(returnValue(connection)); + allowing(connection).getMetaData(); + will(returnValue(metadata)); + allowing(connection); + allowing(metadata).getDriverName(); + will(returnValue("Some_Unknown_driver")); + allowing(result).next(); + will(returnValue(true)); + }}); + + adapter.start(); + assertEquals("has the default locker", adapter.getLocker().getClass(), DefaultDatabaseLocker.class); + adapter.stop(); + } + + /* + * This tests configuring the different broker properties using + * xbeans-spring + */ + @Test + public void testBrokerConfig() throws Exception { + ActiveMQTopic dest; + BrokerService broker; + + File journalFile = new File(JOURNAL_ROOT); + recursiveDelete(journalFile); + + // Create broker from resource + // System.out.print("Creating broker... "); + broker = createBroker("org/apache/activemq/config/example.xml"); + LOG.info("Success"); + + try { + // Check broker configuration + // System.out.print("Checking broker configurations... "); + assertEquals("Broker Config Error (brokerName)", "brokerConfigTest", broker.getBrokerName()); + assertEquals("Broker Config Error (populateJMSXUserID)", false, broker.isPopulateJMSXUserID()); + assertEquals("Broker Config Error (useLoggingForShutdownErrors)", true, broker.isUseLoggingForShutdownErrors()); + assertEquals("Broker Config Error (useJmx)", true, broker.isUseJmx()); + assertEquals("Broker Config Error (persistent)", false, broker.isPersistent()); + assertEquals("Broker Config Error (useShutdownHook)", false, broker.isUseShutdownHook()); + assertEquals("Broker Config Error (deleteAllMessagesOnStartup)", true, broker.isDeleteAllMessagesOnStartup()); + LOG.info("Success"); + + // Check specific vm transport + // System.out.print("Checking vm connector... "); + assertEquals("Should have a specific VM Connector", "vm://javacoola", broker.getVmConnectorURI().toString()); + LOG.info("Success"); + + // Check transport connectors list + // System.out.print("Checking transport connectors... "); + List<TransportConnector> connectors = broker.getTransportConnectors(); + assertTrue("Should have created at least 3 connectors", connectors.size() >= 3); + assertTrue("1st connector should be TcpTransportServer", connectors.get(0).getServer() instanceof TcpTransportServer); + assertTrue("2nd connector should be TcpTransportServer", connectors.get(1).getServer() instanceof TcpTransportServer); + assertTrue("3rd connector should be TcpTransportServer", connectors.get(2).getServer() instanceof TcpTransportServer); + + // Check network connectors + // System.out.print("Checking network connectors... "); + List<NetworkConnector> networkConnectors = broker.getNetworkConnectors(); + assertEquals("Should have a single network connector", 1, networkConnectors.size()); + LOG.info("Success"); + + // Check dispatch policy configuration + // System.out.print("Checking dispatch policies... "); + + dest = new ActiveMQTopic("Topic.SimpleDispatch"); + assertTrue("Should have a simple dispatch policy for " + dest.getTopicName(), + broker.getDestinationPolicy().getEntryFor(dest).getDispatchPolicy() instanceof SimpleDispatchPolicy); + + dest = new ActiveMQTopic("Topic.RoundRobinDispatch"); + assertTrue("Should have a round robin dispatch policy for " + dest.getTopicName(), + broker.getDestinationPolicy().getEntryFor(dest).getDispatchPolicy() instanceof RoundRobinDispatchPolicy); + + dest = new ActiveMQTopic("Topic.StrictOrderDispatch"); + assertTrue("Should have a strict order dispatch policy for " + dest.getTopicName(), + broker.getDestinationPolicy().getEntryFor(dest).getDispatchPolicy() instanceof StrictOrderDispatchPolicy); + LOG.info("Success"); + + // Check subscription policy configuration + // System.out.print("Checking subscription recovery policies... "); + SubscriptionRecoveryPolicy subsPolicy; + + dest = new ActiveMQTopic("Topic.FixedSizedSubs"); + subsPolicy = broker.getDestinationPolicy().getEntryFor(dest).getSubscriptionRecoveryPolicy(); + assertTrue("Should have a fixed sized subscription recovery policy for " + dest.getTopicName(), subsPolicy instanceof FixedSizedSubscriptionRecoveryPolicy); + assertEquals("FixedSizedSubsPolicy Config Error (maximumSize)", 2000000, ((FixedSizedSubscriptionRecoveryPolicy) subsPolicy).getMaximumSize()); + assertEquals("FixedSizedSubsPolicy Config Error (useSharedBuffer)", false, ((FixedSizedSubscriptionRecoveryPolicy) subsPolicy).isUseSharedBuffer()); + + dest = new ActiveMQTopic("Topic.LastImageSubs"); + subsPolicy = broker.getDestinationPolicy().getEntryFor(dest).getSubscriptionRecoveryPolicy(); + assertTrue("Should have a last image subscription recovery policy for " + dest.getTopicName(), subsPolicy instanceof LastImageSubscriptionRecoveryPolicy); + + dest = new ActiveMQTopic("Topic.NoSubs"); + subsPolicy = broker.getDestinationPolicy().getEntryFor(dest).getSubscriptionRecoveryPolicy(); + assertTrue("Should have no subscription recovery policy for " + dest.getTopicName(), subsPolicy instanceof NoSubscriptionRecoveryPolicy); + + dest = new ActiveMQTopic("Topic.TimedSubs"); + subsPolicy = broker.getDestinationPolicy().getEntryFor(dest).getSubscriptionRecoveryPolicy(); + assertTrue("Should have a timed subscription recovery policy for " + dest.getTopicName(), subsPolicy instanceof TimedSubscriptionRecoveryPolicy); + assertEquals("TimedSubsPolicy Config Error (recoverDuration)", 25000, ((TimedSubscriptionRecoveryPolicy) subsPolicy).getRecoverDuration()); + LOG.info("Success"); + + // Check usage manager + // System.out.print("Checking memory manager configurations... "); + SystemUsage systemUsage = broker.getSystemUsage(); + assertTrue("Should have a SystemUsage", systemUsage != null); + assertEquals("SystemUsage Config Error (MemoryUsage.limit)", 1024 * 1024 * 10, systemUsage.getMemoryUsage().getLimit()); + assertEquals("SystemUsage Config Error (MemoryUsage.percentUsageMinDelta)", 20, systemUsage.getMemoryUsage().getPercentUsageMinDelta()); + assertEquals("SystemUsage Config Error (TempUsage.limit)", 1024 * 1024 * 100, systemUsage.getTempUsage().getLimit()); + assertEquals("SystemUsage Config Error (StoreUsage.limit)", 1024 * 1024 * 1024, systemUsage.getStoreUsage().getLimit()); + assertEquals("SystemUsage Config Error (StoreUsage.name)", "foo", systemUsage.getStoreUsage().getName()); + + assertNotNull(systemUsage.getStoreUsage().getStore()); + assertTrue(systemUsage.getStoreUsage().getStore() instanceof MemoryPersistenceAdapter); + + LOG.info("Success"); + + } finally { + if (broker != null) { + broker.stop(); + } + } + } + + /* + * This tests creating a journal persistence adapter using xbeans-spring + */ + @Test + public void testJournalConfig() throws Exception { + File journalFile = new File(JOURNAL_ROOT + "testJournalConfig/journal"); + recursiveDelete(journalFile); + + BrokerService broker; + broker = createBroker(new FileSystemResource(CONF_ROOT + "journal-example.xml")); + try { + assertEquals("Broker Config Error (brokerName)", "brokerJournalConfigTest", broker.getBrokerName()); + + PersistenceAdapter adapter = broker.getPersistenceAdapter(); + + assertTrue("Should have created a journal persistence adapter", adapter instanceof JournalPersistenceAdapter); + assertTrue("Should have created a journal directory at " + journalFile.getAbsolutePath(), journalFile.exists()); + + LOG.info("Success"); + } finally { + if (broker != null) { + broker.stop(); + } + } + } + + /* + * This tests creating a memory persistence adapter using xbeans-spring + */ + @Test + public void testMemoryConfig() throws Exception { + File journalFile = new File(JOURNAL_ROOT + "testMemoryConfig"); + recursiveDelete(journalFile); + + File derbyFile = new File(DERBY_ROOT + "testMemoryConfig"); + recursiveDelete(derbyFile); + + BrokerService broker; + broker = createBroker(new FileSystemResource(CONF_ROOT + "memory-example.xml")); + + try { + assertEquals("Broker Config Error (brokerName)", "brokerMemoryConfigTest", broker.getBrokerName()); + + PersistenceAdapter adapter = broker.getPersistenceAdapter(); + + assertTrue("Should have created a memory persistence adapter", adapter instanceof MemoryPersistenceAdapter); + assertTrue("Should have not created a derby directory at " + derbyFile.getAbsolutePath(), !derbyFile.exists()); + assertTrue("Should have not created a journal directory at " + journalFile.getAbsolutePath(), !journalFile.exists()); + + LOG.info("Success"); + } finally { + if (broker != null) { + broker.stop(); + } + } + } + + @Test + public void testConnectorConfig() throws Exception { + + File journalFile = new File(JOURNAL_ROOT + "testMemoryConfig"); + recursiveDelete(journalFile); + + File derbyFile = new File(DERBY_ROOT + "testMemoryConfig"); + recursiveDelete(derbyFile); + + final int MAX_PRODUCERS = 5; + final int MAX_CONSUMERS = 10; + + BrokerService broker = createBroker(new FileSystemResource(CONF_ROOT + "connector-properties.xml")); + broker.start(); + try { + + assertEquals(broker.getTransportConnectorByScheme("tcp").getMaximumProducersAllowedPerConnection(), MAX_PRODUCERS); + assertEquals(broker.getTransportConnectorByScheme("tcp").getMaximumConsumersAllowedPerConnection(), MAX_CONSUMERS); + + ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61631"); + javax.jms.Connection connection = activeMQConnectionFactory.createConnection(); + connection.start(); + Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + Topic topic = session.createTopic("test.foo"); + + for (int i = 0; i < MAX_PRODUCERS; i++) { + session.createProducer(topic); + } + + try { + session.createProducer(topic); + fail("Should have got an exception on exceeding MAX_PRODUCERS"); + } catch (JMSException expected) { + } + + try { + for (int i = 0; i < (MAX_CONSUMERS + 1); i++) { + MessageConsumer consumer = session.createConsumer(topic); + assertNotNull(consumer); + } + fail("Should have caught an exception"); + } catch (JMSException e) { + } + + LOG.info("Success"); + } finally { + if (broker != null) { + broker.stop(); + } + } + } + + @Test + public void testXmlConfigHelper() throws Exception { + BrokerService broker; + + broker = createBroker(new FileSystemResource(CONF_ROOT + "memory-example.xml")); + try { + assertEquals("Broker Config Error (brokerName)", "brokerMemoryConfigTest", broker.getBrokerName()); + } finally { + if (broker != null) { + broker.stop(); + } + } + + broker = createBroker("org/apache/activemq/config/config.xml"); + try { + assertEquals("Broker Config Error (brokerName)", "brokerXmlConfigHelper", broker.getBrokerName()); + } finally { + if (broker != null) { + broker.stop(); + } + } + } + + /* + * TODO: Create additional tests for forwarding bridges + */ + + protected static void recursiveDelete(File file) { + if (file.isDirectory()) { + File[] files = file.listFiles(); + for (int i = 0; i < files.length; i++) { + recursiveDelete(files[i]); + } + } + file.delete(); + } + + protected BrokerService createBroker(String resource) throws Exception { + return createBroker(new ClassPathResource(resource)); + } + + protected BrokerService createBroker(Resource resource) throws Exception { + BrokerFactoryBean factory = new BrokerFactoryBean(resource); + factory.afterPropertiesSet(); + + BrokerService broker = factory.getBroker(); + + assertTrue("Should have a broker!", broker != null); + + // Broker is already started by default when using the XML file + // broker.start(); + + return broker; + } +}
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/60979268/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/ConfigUsingDestinationOptions.java ---------------------------------------------------------------------- diff --git a/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/ConfigUsingDestinationOptions.java b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/ConfigUsingDestinationOptions.java new file mode 100644 index 0000000..704e408 --- /dev/null +++ b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/ConfigUsingDestinationOptions.java @@ -0,0 +1,72 @@ +/** + * 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.activemq.config; + +import javax.jms.Connection; +import javax.jms.InvalidSelectorException; +import javax.jms.JMSException; +import javax.jms.Session; + +import junit.framework.TestCase; + +import org.apache.activemq.ActiveMQConnectionFactory; +import org.apache.activemq.ActiveMQMessageConsumer; +import org.apache.activemq.command.ActiveMQQueue; + +public class ConfigUsingDestinationOptions extends TestCase { + public void testValidSelectorConfig() throws JMSException { + ActiveMQQueue queue = new ActiveMQQueue("TEST.FOO?consumer.selector=test=1"); + + ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost"); + Connection conn = factory.createConnection(); + Session sess = conn.createSession(false, Session.AUTO_ACKNOWLEDGE); + + ActiveMQMessageConsumer cons; + // JMS selector should be priority + cons = (ActiveMQMessageConsumer) sess.createConsumer(queue, "test=2"); + assertEquals("test=2", cons.getMessageSelector()); + + // Test setting using JMS destinations + cons = (ActiveMQMessageConsumer) sess.createConsumer(queue); + assertEquals("test=1", cons.getMessageSelector()); + } + + public void testInvalidSelectorConfig() throws JMSException { + ActiveMQQueue queue = new ActiveMQQueue("TEST.FOO?consumer.selector=test||1"); + + ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost"); + Connection conn = factory.createConnection(); + Session sess = conn.createSession(false, Session.AUTO_ACKNOWLEDGE); + + ActiveMQMessageConsumer cons; + // JMS selector should be priority + try { + cons = (ActiveMQMessageConsumer) sess.createConsumer(queue, "test||1"); + fail("Selector should be invalid" + cons); + } catch (InvalidSelectorException e) { + + } + + // Test setting using JMS destinations + try { + cons = (ActiveMQMessageConsumer) sess.createConsumer(queue); + fail("Selector should be invalid" + cons); + } catch (InvalidSelectorException e) { + + } + } +} http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/60979268/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/JDBCConfigTest.java ---------------------------------------------------------------------- diff --git a/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/JDBCConfigTest.java b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/JDBCConfigTest.java new file mode 100644 index 0000000..e13f53d --- /dev/null +++ b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/JDBCConfigTest.java @@ -0,0 +1,102 @@ +/** + * 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.activemq.config; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.io.File; + +import org.apache.activemq.broker.BrokerService; +import org.apache.activemq.store.PersistenceAdapter; +import org.apache.activemq.store.jdbc.JDBCPersistenceAdapter; +import org.apache.activemq.wireformat.ObjectStreamWireFormat; +import org.apache.activemq.xbean.BrokerFactoryBean; +import org.apache.derby.jdbc.EmbeddedDataSource; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.FileSystemResource; +import org.springframework.core.io.Resource; + +public class JDBCConfigTest { + + protected static final String JOURNAL_ROOT = "target/test-data/"; + protected static final String DERBY_ROOT = "target/test-data/"; + protected static final String CONF_ROOT = "src/test/resources/org/apache/activemq/config/sample-conf/"; + private static final Logger LOG = LoggerFactory.getLogger(JDBCConfigTest.class); + + /* + * This tests creating a jdbc persistence adapter using xbeans-spring + */ + @Test + public void testJdbcConfig() throws Exception { + File journalFile = new File(JOURNAL_ROOT + "testJDBCConfig/journal"); + recursiveDelete(journalFile); + + File derbyFile = new File(DERBY_ROOT + "testJDBCConfig/derbydb"); // Default + recursiveDelete(derbyFile); + + BrokerService broker; + broker = createBroker(new FileSystemResource(CONF_ROOT + "jdbc-example.xml")); + try { + assertEquals("Broker Config Error (brokerName)", "brokerJdbcConfigTest", broker.getBrokerName()); + + PersistenceAdapter adapter = broker.getPersistenceAdapter(); + + assertTrue("Should have created a jdbc persistence adapter", adapter instanceof JDBCPersistenceAdapter); + assertEquals("JDBC Adapter Config Error (cleanupPeriod)", 60000, ((JDBCPersistenceAdapter) adapter).getCleanupPeriod()); + assertTrue("Should have created an EmbeddedDataSource", ((JDBCPersistenceAdapter) adapter).getDataSource() instanceof EmbeddedDataSource); + assertTrue("Should have created a DefaultWireFormat", ((JDBCPersistenceAdapter) adapter).getWireFormat() instanceof ObjectStreamWireFormat); + + LOG.info("Success"); + } finally { + if (broker != null) { + broker.stop(); + } + } + } + + protected static void recursiveDelete(File file) { + if (file.isDirectory()) { + File[] files = file.listFiles(); + for (int i = 0; i < files.length; i++) { + recursiveDelete(files[i]); + } + } + file.delete(); + } + + protected BrokerService createBroker(String resource) throws Exception { + return createBroker(new ClassPathResource(resource)); + } + + protected BrokerService createBroker(Resource resource) throws Exception { + BrokerFactoryBean factory = new BrokerFactoryBean(resource); + factory.afterPropertiesSet(); + + BrokerService broker = factory.getBroker(); + + assertTrue("Should have a broker!", broker != null); + + // Broker is already started by default when using the XML file + // broker.start(); + + return broker; + } +} http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/60979268/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/broker.properties ---------------------------------------------------------------------- diff --git a/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/broker.properties b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/broker.properties new file mode 100644 index 0000000..921671f --- /dev/null +++ b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/broker.properties @@ -0,0 +1,21 @@ +## --------------------------------------------------------------------------- +## 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. +## --------------------------------------------------------------------------- +# START SNIPPET: example +useJmx = false +persistent = false +brokerName = Cheese +# END SNIPPET: example \ No newline at end of file http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/60979268/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/config.xml ---------------------------------------------------------------------- diff --git a/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/config.xml b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/config.xml new file mode 100644 index 0000000..9ec13ff --- /dev/null +++ b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/config.xml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + 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. +--> +<beans + xmlns="http://www.springframework.org/schema/beans" + xmlns:amq="http://activemq.apache.org/schema/core" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd + http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd"> + + <broker brokerName="brokerXmlConfigHelper" persistent="false" useShutdownHook="false" deleteAllMessagesOnStartup="true" xmlns="http://activemq.apache.org/schema/core"> + <transportConnectors> + <transportConnector uri="tcp://localhost:61638"/> + </transportConnectors> + </broker> + +</beans> http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/60979268/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/example.xml ---------------------------------------------------------------------- diff --git a/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/example.xml b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/example.xml new file mode 100644 index 0000000..0a7a686 --- /dev/null +++ b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/example.xml @@ -0,0 +1,104 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + 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. +--> +<beans + xmlns="http://www.springframework.org/schema/beans" + xmlns:amq="http://activemq.apache.org/schema/core" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd + http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd"> + + <!-- normal ActiveMQ XML config which is less verbose & can be validated --> + <amq:broker brokerName="brokerConfigTest" populateJMSXUserID="false" + useLoggingForShutdownErrors="true" useJmx="true" + persistent="false" vmConnectorURI="vm://javacoola" + useShutdownHook="false" deleteAllMessagesOnStartup="true"> + + <!-- + || NOTE this config file is used for unit testing the configuration mechanism + || it is not necessarily a good example of a config file! :) + --> + <amq:destinationPolicy> + <amq:policyMap> + <amq:policyEntries> + + <amq:policyEntry topic="Topic.SimpleDispatch"> + <amq:dispatchPolicy><amq:simpleDispatchPolicy /></amq:dispatchPolicy> + </amq:policyEntry> + + <amq:policyEntry topic="Topic.RoundRobinDispatch"> + <amq:dispatchPolicy><amq:roundRobinDispatchPolicy /></amq:dispatchPolicy> + </amq:policyEntry> + + <amq:policyEntry topic="Topic.StrictOrderDispatch"> + <amq:dispatchPolicy><amq:strictOrderDispatchPolicy /></amq:dispatchPolicy> + </amq:policyEntry> + + <amq:policyEntry topic="Topic.FixedSizedSubs"> + <amq:subscriptionRecoveryPolicy> + <amq:fixedSizedSubscriptionRecoveryPolicy maximumSize="2000000" useSharedBuffer="false"/> + </amq:subscriptionRecoveryPolicy> + </amq:policyEntry> + + <amq:policyEntry topic="Topic.LastImageSubs"> + <amq:subscriptionRecoveryPolicy><amq:lastImageSubscriptionRecoveryPolicy/></amq:subscriptionRecoveryPolicy> + </amq:policyEntry> + + <amq:policyEntry topic="Topic.NoSubs"> + <amq:subscriptionRecoveryPolicy><amq:noSubscriptionRecoveryPolicy/></amq:subscriptionRecoveryPolicy> + </amq:policyEntry> + + <amq:policyEntry topic="Topic.TimedSubs"> + <amq:subscriptionRecoveryPolicy><amq:timedSubscriptionRecoveryPolicy recoverDuration="25000"/></amq:subscriptionRecoveryPolicy> + </amq:policyEntry> + + </amq:policyEntries> + </amq:policyMap> + </amq:destinationPolicy> + + <amq:networkConnectors> + <amq:networkConnector uri="static://(tcp://localhost:61616)"/> + </amq:networkConnectors> + + <amq:persistenceAdapter> + <amq:memoryPersistenceAdapter createTransactionStore="true"/> + </amq:persistenceAdapter> + + <amq:systemUsage> + <amq:systemUsage> + <amq:memoryUsage> + <amq:memoryUsage limit="10 mb" percentUsageMinDelta="20"/> + </amq:memoryUsage> + <amq:storeUsage> + <amq:storeUsage limit="1 gb" name="foo"/> + </amq:storeUsage> + <amq:tempUsage> + <amq:tempUsage limit="100 mb"/> + </amq:tempUsage> + </amq:systemUsage> + </amq:systemUsage> + + <amq:transportConnectors> + <amq:transportConnector uri="tcp://localhost:61635"/> + <amq:transportConnector uri="tcp://localhost:61636"/> + <amq:transportConnector uri="tcp://localhost:61637"/> + </amq:transportConnectors> + + + </amq:broker> + +</beans> http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/60979268/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/sample-conf/connector-properties.xml ---------------------------------------------------------------------- diff --git a/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/sample-conf/connector-properties.xml b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/sample-conf/connector-properties.xml new file mode 100644 index 0000000..23f065d --- /dev/null +++ b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/sample-conf/connector-properties.xml @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + 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. +--> + +<beans + xmlns="http://www.springframework.org/schema/beans" + xmlns:amq="http://activemq.apache.org/schema/core" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd + http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd"> + + <amq:broker brokerName="brokerConnectorTest" persistent="false" useShutdownHook="false" deleteAllMessagesOnStartup="true"> + + <amq:persistenceAdapter> + <amq:memoryPersistenceAdapter createTransactionStore = "false"/> + </amq:persistenceAdapter> + + <amq:transportConnectors> + <amq:transportConnector uri="tcp://localhost:61631" maximumProducersAllowedPerConnection="5" maximumConsumersAllowedPerConnection="10"/> + </amq:transportConnectors> + + </amq:broker> +</beans> http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/60979268/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/sample-conf/jdbc-example.xml ---------------------------------------------------------------------- diff --git a/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/sample-conf/jdbc-example.xml b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/sample-conf/jdbc-example.xml new file mode 100644 index 0000000..bbd98ea --- /dev/null +++ b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/sample-conf/jdbc-example.xml @@ -0,0 +1,52 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + 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. +--> +<beans + xmlns="http://www.springframework.org/schema/beans" + xmlns:amq="http://activemq.apache.org/schema/core" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd + http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd"> + + <amq:broker brokerName="brokerJdbcConfigTest" persistent="true" useShutdownHook="false" deleteAllMessagesOnStartup="true"> + + <amq:persistenceAdapter> + <amq:jdbcPersistenceAdapter> + <property name="cleanupPeriod" value="60000"/> + <property name="dataSource" ref="embedded-ds"/> + <property name="wireFormat"> + <bean id="myWireFormat" class="org.apache.activemq.wireformat.ObjectStreamWireFormat"/> + </property> + </amq:jdbcPersistenceAdapter> + </amq:persistenceAdapter> + + <amq:transportConnectors> + <amq:transportConnector uri="tcp://localhost:61635"/> + </amq:transportConnectors> + + </amq:broker> + + <!-- ==================================================================== --> + <!-- JDBC DataSource Configurations --> + <!-- ==================================================================== --> + + <!-- The Datasource that will be used by the Broker --> + <bean id="embedded-ds" class="org.apache.derby.jdbc.EmbeddedDataSource"> + <property name="databaseName" value="testJdbcConfig"/> + <property name="createDatabase" value="create"/> + </bean> +</beans> http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/60979268/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/sample-conf/journal-example.xml ---------------------------------------------------------------------- diff --git a/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/sample-conf/journal-example.xml b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/sample-conf/journal-example.xml new file mode 100644 index 0000000..2a79308 --- /dev/null +++ b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/sample-conf/journal-example.xml @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + 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. +--> +<beans + xmlns="http://www.springframework.org/schema/beans" + xmlns:amq="http://activemq.apache.org/schema/core" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd + http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd"> + + <amq:broker brokerName="brokerJournalConfigTest" persistent="true" useShutdownHook="false" deleteAllMessagesOnStartup="true"> + + <amq:persistenceAdapter> + <amq:journalPersistenceAdapter> + <amq:journal> + <ref bean="myJournalImpl"/> + </amq:journal> + + <amq:persistenceAdapter> + <amq:memoryPersistenceAdapter createTransactionStore="true"/> + </amq:persistenceAdapter> + + <amq:taskRunnerFactory> + <bean id="myTaskRunnerFactory" class="org.apache.activemq.thread.TaskRunnerFactory"/> + </amq:taskRunnerFactory> + </amq:journalPersistenceAdapter> + </amq:persistenceAdapter> + + <amq:transportConnectors> + <amq:transportConnector uri="tcp://localhost:61635"/> + </amq:transportConnectors> + + </amq:broker> + + <!-- The journal implementation that will be used --> + <bean id="myJournalImpl" class="org.apache.activeio.journal.active.JournalImpl"> + <constructor-arg index="0"> + <bean id="myFile" class="java.io.File"> + <constructor-arg index="0"> + <value>target/test-data/testJournalConfig/journal</value> + </constructor-arg> + </bean> + </constructor-arg> + </bean> + +</beans> http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/60979268/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/sample-conf/journaledjdbc-example.xml ---------------------------------------------------------------------- diff --git a/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/sample-conf/journaledjdbc-example.xml b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/sample-conf/journaledjdbc-example.xml new file mode 100644 index 0000000..4a6a0db --- /dev/null +++ b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/sample-conf/journaledjdbc-example.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + 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. +--> + +<beans + xmlns="http://www.springframework.org/schema/beans" + xmlns:amq="http://activemq.apache.org/schema/core" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd + http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd"> + + <amq:broker brokerName="brokerJournaledJDBCConfigTest" persistent="true" useShutdownHook="false" deleteAllMessagesOnStartup="true"> + + <amq:persistenceFactory> + <amq:journalPersistenceAdapterFactory journalLogFiles="4" journalLogFileSize="32768" dataDirectory="target/test-data/testJournaledJDBCConfig" /> + </amq:persistenceFactory> + <amq:transportConnectors> + <amq:transportConnector uri="tcp://localhost:61635"/> + </amq:transportConnectors> + + </amq:broker> +</beans> http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/60979268/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/sample-conf/memory-example.xml ---------------------------------------------------------------------- diff --git a/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/sample-conf/memory-example.xml b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/sample-conf/memory-example.xml new file mode 100644 index 0000000..10b38a8 --- /dev/null +++ b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/sample-conf/memory-example.xml @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + 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. +--> + +<beans + xmlns="http://www.springframework.org/schema/beans" + xmlns:amq="http://activemq.apache.org/schema/core" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd + http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd"> + + <amq:broker brokerName="brokerMemoryConfigTest" persistent="false" useShutdownHook="false" deleteAllMessagesOnStartup="true"> + + <amq:persistenceAdapter> + <amq:memoryPersistenceAdapter createTransactionStore = "true"/> + </amq:persistenceAdapter> + + <amq:transportConnectors> + <amq:transportConnector uri="tcp://localhost:61635"/> + </amq:transportConnectors> + + </amq:broker> +</beans> http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/60979268/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/spring-test.xml ---------------------------------------------------------------------- diff --git a/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/spring-test.xml b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/spring-test.xml new file mode 100644 index 0000000..0e2f145 --- /dev/null +++ b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/config/spring-test.xml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + 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. +--> +<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> + +<beans> + <bean id="wireFormat" class="org.apache.activemq.io.impl.DefaultWireFormat"/> + + <bean id="transport" factory-method="newInstance" class="org.apache.activemq.transport.TransportServerChannelProvider"> + <constructor-arg index="0"> + <bean class="org.apache.activemq.io.impl.DefaultWireFormat"/> + <!--- + <ref bean="wireFormat"/> + --> + </constructor-arg> + <constructor-arg index="1"> + <value>vm://localhost</value> + </constructor-arg> + </bean> + +</beans> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/60979268/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/console/command/AMQ3410Test.java ---------------------------------------------------------------------- diff --git a/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/console/command/AMQ3410Test.java b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/console/command/AMQ3410Test.java new file mode 100644 index 0000000..dadff34 --- /dev/null +++ b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/console/command/AMQ3410Test.java @@ -0,0 +1,186 @@ +/** + * 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.activemq.console.command; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +import junit.framework.TestCase; + +import org.apache.activemq.ActiveMQConnectionFactory; +import org.apache.activemq.broker.BrokerService; +import org.apache.activemq.console.CommandContext; +import org.apache.activemq.console.formatter.CommandShellOutputFormatter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.support.AbstractApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +public class AMQ3410Test extends TestCase { + @SuppressWarnings("unused") + private static final Logger LOG = LoggerFactory + .getLogger(PurgeCommandTest.class); + private static final Collection<String> DEFAULT_OPTIONS = Arrays + .asList(new String[] { "--amqurl", "tcp://localhost:61616", }); + + private static final Collection<String> DEFAULT_TOKENS = Arrays + .asList(new String[] { "FOO.QUEUE" }); + + protected AbstractApplicationContext context; + + protected void setUp() throws Exception { + super.setUp(); + + context = createApplicationContext(); + + } + + protected AbstractApplicationContext createApplicationContext() { + return new ClassPathXmlApplicationContext("org/apache/activemq/console/command/activemq.xml"); + } + + protected void tearDown() throws Exception { + BrokerService broker = (BrokerService) context.getBean("localbroker"); + broker.stop(); + broker = (BrokerService) context.getBean("default"); + broker.stop(); + super.tearDown(); + } + + public void testNoFactorySet() throws Exception { + AmqBrowseCommand command = new AmqBrowseCommand(); + CommandContext context = new CommandContext(); + + context.setFormatter(new CommandShellOutputFormatter(System.out)); + + command.setCommandContext(context); + + List<String> tokens = new ArrayList<String>(); + tokens.addAll(DEFAULT_OPTIONS); + tokens.addAll(DEFAULT_TOKENS); + + command.execute(tokens); + assertNotNull(command.getConnectionFactory()); + assertTrue(command.getConnectionFactory() instanceof ActiveMQConnectionFactory); + } + + public void testFactorySet() throws Exception { + AmqBrowseCommand command = new AmqBrowseCommand(); + CommandContext context = new CommandContext(); + + context.setFormatter(new CommandShellOutputFormatter(System.out)); + + command.setCommandContext(context); + + List<String> tokens = new ArrayList<String>(); + tokens.addAll(DEFAULT_OPTIONS); + tokens.add("--factory"); + tokens.add(DummyConnectionFactory.class.getCanonicalName()); + tokens.addAll(DEFAULT_TOKENS); + + command.execute(tokens); + + assertNotNull(command.getConnectionFactory()); + assertTrue("wrong instance returned: " + + command.getConnectionFactory().getClass().getName(), command + .getConnectionFactory() instanceof DummyConnectionFactory); + } + + public void testFactorySetWrong1() throws Exception { + AmqBrowseCommand command = new AmqBrowseCommand(); + CommandContext context = new CommandContext(); + + context.setFormatter(new CommandShellOutputFormatter(System.out)); + + command.setCommandContext(context); + + List<String> tokens = new ArrayList<String>(); + tokens.addAll(DEFAULT_OPTIONS); + tokens.add("--factory"); + tokens + .add("org.apache.activemq.console.command.TestAMQ3410.DoesntExistFactory"); + tokens.addAll(DEFAULT_TOKENS); + + try { + command.execute(tokens); + } catch (Throwable cause) { + while (null != cause) { + if (cause instanceof java.lang.ClassNotFoundException) + return; + cause = cause.getCause(); + } + } + assertFalse("No exception caught", true); + } + + public void testFactorySetWrong2() throws Exception { + AmqBrowseCommand command = new AmqBrowseCommand(); + CommandContext context = new CommandContext(); + + context.setFormatter(new CommandShellOutputFormatter(System.out)); + + command.setCommandContext(context); + + List<String> tokens = new ArrayList<String>(); + tokens.addAll(DEFAULT_OPTIONS); + tokens.add("--factory"); + tokens.add(InvalidConnectionFactory.class.getCanonicalName()); + tokens.addAll(DEFAULT_TOKENS); + + try { + command.execute(tokens); + } catch (Throwable e) { + Throwable cause = e; + while (null != cause) { + if (cause instanceof java.lang.NoSuchMethodException) + return; + cause = cause.getCause(); + } + assertFalse(e.toString(), true); + } + assertFalse("No exception caught", true); + } + + public void testFactorySetWrong3() throws Exception { + AmqBrowseCommand command = new AmqBrowseCommand(); + CommandContext context = new CommandContext(); + + context.setFormatter(new CommandShellOutputFormatter(System.out)); + + command.setCommandContext(context); + + List<String> tokens = new ArrayList<String>(); + tokens.addAll(DEFAULT_OPTIONS); + tokens.add("--factory"); + tokens.add("java.lang.Object"); + tokens.addAll(DEFAULT_TOKENS); + + try { + command.execute(tokens); + } catch (Throwable cause) { + while (null != cause) { + if (cause instanceof java.lang.NoSuchMethodException) + return; + cause = cause.getCause(); + } + } + assertFalse(true); + } + +} http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/60979268/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/console/command/AMQ3411Test.java ---------------------------------------------------------------------- diff --git a/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/console/command/AMQ3411Test.java b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/console/command/AMQ3411Test.java new file mode 100644 index 0000000..8930b2c --- /dev/null +++ b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/console/command/AMQ3411Test.java @@ -0,0 +1,197 @@ +/** + * 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.activemq.console.command; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +import junit.framework.TestCase; + +import org.apache.activemq.broker.BrokerService; +import org.apache.activemq.console.CommandContext; +import org.apache.activemq.console.formatter.CommandShellOutputFormatter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.support.AbstractApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +public class AMQ3411Test extends TestCase { + @SuppressWarnings("unused") + private static final Logger LOG = LoggerFactory + .getLogger(AMQ3411Test.class); + private static final Collection<String> DEFAULT_OPTIONS = Arrays + .asList(new String[] { "--amqurl", "tcp://localhost:61616", }); + + private static final Collection<String> DEFAULT_TOKENS = Arrays + .asList(new String[] { "FOO.QUEUE" }); + protected AbstractApplicationContext context; + protected static final String origPassword = "ABCDEFG"; + + protected void setUp() throws Exception { + super.setUp(); + + context = createApplicationContext(); + + } + + protected AbstractApplicationContext createApplicationContext() { + return new ClassPathXmlApplicationContext("org/apache/activemq/console/command/activemq.xml"); + } + + protected void tearDown() throws Exception { + BrokerService broker = (BrokerService) context.getBean("localbroker"); + broker.stop(); + broker = (BrokerService) context.getBean("default"); + broker.stop(); + super.tearDown(); + } + + public void testNoFactorySet() throws Exception { + AmqBrowseCommand command = new AmqBrowseCommand(); + CommandContext context = new CommandContext(); + + context.setFormatter(new CommandShellOutputFormatter(System.out)); + + command.setCommandContext(context); + + List<String> tokens = new ArrayList<String>(); + tokens.addAll(DEFAULT_OPTIONS); + tokens.addAll(DEFAULT_TOKENS); + + command.execute(tokens); + + assertNotNull(command.getPasswordFactory()); + assertTrue(command.getPasswordFactory() instanceof DefaultPasswordFactory); + assertNull(command.getPassword()); + } + + public void testUsernamePasswordSet() throws Exception { + AmqBrowseCommand command = new AmqBrowseCommand(); + CommandContext context = new CommandContext(); + + String username = "user"; + String password = "password"; + + context.setFormatter(new CommandShellOutputFormatter(System.out)); + + command.setCommandContext(context); + + List<String> tokens = new ArrayList<String>(); + tokens.addAll(DEFAULT_OPTIONS); + tokens.add("--password"); + tokens.add(password); + + tokens.add("--user"); + tokens.add(username); + tokens.addAll(DEFAULT_TOKENS); + + command.execute(tokens); + + assertNotNull(command.getPasswordFactory()); + assertTrue(command.getPasswordFactory() instanceof DefaultPasswordFactory); + assertEquals(password, command.getPassword()); + assertEquals(username, command.getUsername()); + } + + public void testFactorySet() throws Exception { + AmqBrowseCommand command = new AmqBrowseCommand(); + CommandContext context = new CommandContext(); + + context.setFormatter(new CommandShellOutputFormatter(System.out)); + + command.setCommandContext(context); + + List<String> tokens = new ArrayList<String>(); + tokens.addAll(DEFAULT_OPTIONS); + tokens.add("--passwordFactory"); + tokens.add(LowercasingPasswordFactory.class.getCanonicalName()); + tokens.add("--password"); + tokens.add(origPassword); + tokens.addAll(DEFAULT_TOKENS); + + command.execute(tokens); + assertNotNull(command.getPasswordFactory()); + assertTrue(command.getPasswordFactory() instanceof LowercasingPasswordFactory); + + // validate that the factory is indeed being used for the password. + assertEquals(origPassword.toLowerCase(), command.getPassword()); + } + + public void testFactorySetWrong1() throws Exception { + AmqBrowseCommand command = new AmqBrowseCommand(); + CommandContext context = new CommandContext(); + + context.setFormatter(new CommandShellOutputFormatter(System.out)); + + command.setCommandContext(context); + + List<String> tokens = new ArrayList<String>(); + tokens.addAll(DEFAULT_OPTIONS); + tokens.add("--passwordFactory"); + tokens + .add("org.apache.activemq.console.command.TestAMQ3411.DoesntExistFactory"); + tokens.add("--password"); + tokens.add(origPassword); + + tokens.addAll(DEFAULT_TOKENS); + + try { + command.execute(tokens); + } catch (Throwable e) { + Throwable cause = e; + while (null != cause) { + if (cause instanceof java.lang.ClassNotFoundException) + return; + cause = cause.getCause(); + } + assertFalse(e.toString(), true); + } + assertFalse("No exception caught", true); + } + + public void testFactorySetWrong2() throws Exception { + AmqBrowseCommand command = new AmqBrowseCommand(); + CommandContext context = new CommandContext(); + + context.setFormatter(new CommandShellOutputFormatter(System.out)); + + command.setCommandContext(context); + + List<String> tokens = new ArrayList<String>(); + tokens.addAll(DEFAULT_OPTIONS); + tokens.add("--passwordFactory"); + tokens.add("java.lang.Object"); + tokens.add("--password"); + tokens.add(origPassword); + tokens.addAll(DEFAULT_TOKENS); + + try { + command.execute(tokens); + } catch (Throwable e) { + Throwable cause = e; + while (null != cause) { + if (cause instanceof java.lang.ClassCastException) + return; + cause = cause.getCause(); + } + assertFalse(e.toString(), true); + } + assertFalse("No exception caught", true); + } +} http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/60979268/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/console/command/DummyConnectionFactory.java ---------------------------------------------------------------------- diff --git a/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/console/command/DummyConnectionFactory.java b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/console/command/DummyConnectionFactory.java new file mode 100644 index 0000000..03f9fc5 --- /dev/null +++ b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/console/command/DummyConnectionFactory.java @@ -0,0 +1,44 @@ +/** + * 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.activemq.console.command; + +import org.apache.activemq.ActiveMQConnectionFactory; + +import java.net.URI; + +public class DummyConnectionFactory extends ActiveMQConnectionFactory { + public DummyConnectionFactory() { + super(); + } + + public DummyConnectionFactory(String userName, String password, String brokerURL) { + super(userName, password, brokerURL); + } + + public DummyConnectionFactory(String userName, String password, URI brokerURL) { + super(userName, password, brokerURL); + } + + public DummyConnectionFactory(String brokerURL) { + super(brokerURL); + } + + public DummyConnectionFactory(URI brokerURL) { + super(brokerURL); + } + +} http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/60979268/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/console/command/InvalidConnectionFactory.java ---------------------------------------------------------------------- diff --git a/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/console/command/InvalidConnectionFactory.java b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/console/command/InvalidConnectionFactory.java new file mode 100644 index 0000000..fa57684 --- /dev/null +++ b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/console/command/InvalidConnectionFactory.java @@ -0,0 +1,23 @@ +/** + * 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.activemq.console.command; + +import org.apache.activemq.ActiveMQConnectionFactory; + +public class InvalidConnectionFactory extends ActiveMQConnectionFactory { + +} http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/60979268/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/console/command/LowercasingPasswordFactory.java ---------------------------------------------------------------------- diff --git a/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/console/command/LowercasingPasswordFactory.java b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/console/command/LowercasingPasswordFactory.java new file mode 100644 index 0000000..a0f9b05 --- /dev/null +++ b/tests/activemq5-unit-tests/src/test/java/org/apache/activemq/console/command/LowercasingPasswordFactory.java @@ -0,0 +1,25 @@ +/** + * 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.activemq.console.command; + +public class LowercasingPasswordFactory implements PasswordFactory { + @Override + public String getPassword(String password) { + return password.toLowerCase(); + } + +}
