/* * 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.artemis.tests.integration.openwire; import javax.jms.Connection; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageProducer; import javax.jms.Session; import javax.jms.TextMessage; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import org.apache.activemq.ActiveMQConnection; import org.apache.activemq.ActiveMQConnectionFactory; import org.apache.activemq.ActiveMQXAConnectionFactory; import org.apache.activemq.artemis.api.core.ActiveMQNonExistentQueueException; import org.apache.activemq.artemis.api.core.SimpleString; import org.apache.activemq.artemis.api.core.RoutingType; import org.apache.activemq.command.ActiveMQDestination; import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.rules.TestName; public class BasicOpenWireTest extends OpenWireTestBase { @Rule public TestName name = new TestName(); protected static final String urlString = "tcp://" + OWHOST + ":" + OWPORT + "?wireFormat.cacheEnabled=true"; protected ActiveMQConnectionFactory factory; protected ActiveMQXAConnectionFactory xaFactory; protected ActiveMQConnection connection; protected String topicName = "amqTestTopic1"; protected String queueName = "amqTestQueue1"; protected String topicName2 = "amqTestTopic2"; protected String queueName2 = "amqTestQueue2"; protected String durableQueueName = "durableQueueName"; protected String messageTextPrefix = ""; protected boolean topic = true; protected Map<String, SimpleString> testQueues = new HashMap<>(); @Override @Before public void setUp() throws Exception { super.setUp(); System.setProperty("org.apache.activemq.transport.AbstractInactivityMonitor.keepAliveTime", "5"); createFactories(); SimpleString coreQueue = new SimpleString(queueName); this.server.createQueue(coreQueue, RoutingType.ANYCAST, coreQueue, null, false, false, -1, false, true); testQueues.put(queueName, coreQueue); SimpleString coreQueue2 = new SimpleString(queueName2); this.server.createQueue(coreQueue2, RoutingType.ANYCAST, coreQueue2, null, false, false, -1, false, true); testQueues.put(queueName2, coreQueue2); SimpleString durableQueue = new SimpleString(durableQueueName); this.server.createQueue(durableQueue, RoutingType.ANYCAST, durableQueue, null, true, false, -1, false, true); testQueues.put(durableQueueName, durableQueue); if (!enableSecurity) { connection = (ActiveMQConnection) factory.createConnection(); } } protected void createFactories() { factory = new ActiveMQConnectionFactory(getConnectionUrl()); xaFactory = new ActiveMQXAConnectionFactory(getConnectionUrl()); } protected String getConnectionUrl() { return urlString; } @Override @After public void tearDown() throws Exception { System.clearProperty("org.apache.activemq.transport.AbstractInactivityMonitor.keepAliveTime"); System.out.println("tear down! " + connection); try { if (connection != null) { System.out.println("closing connection"); connection.close(); System.out.println("connection closed."); } Iterator<SimpleString> iterQueues = testQueues.values().iterator(); while (iterQueues.hasNext()) { SimpleString coreQ = iterQueues.next(); try { this.server.destroyQueue(coreQ, null, false, true); } catch (ActiveMQNonExistentQueueException idontcare) { // i don't care if this failed. it means it didn't find the queue } catch (Throwable e) { // just print, what else can we do? e.printStackTrace(); } System.out.println("Destroyed queue: " + coreQ); } testQueues.clear(); } catch (Throwable e) { System.out.println("Exception !! " + e); e.printStackTrace(); } finally { super.tearDown(); System.out.println("Super done."); } } public ActiveMQDestination createDestination(Session session, byte type, String name) throws Exception { if (name == null) { return createDestination(session, type); } switch (type) { case ActiveMQDestination.QUEUE_TYPE: makeSureCoreQueueExist(name); return (ActiveMQDestination) session.createQueue(name); case ActiveMQDestination.TOPIC_TYPE: return (ActiveMQDestination) session.createTopic(name); case ActiveMQDestination.TEMP_QUEUE_TYPE: return (ActiveMQDestination) session.createTemporaryQueue(); case ActiveMQDestination.TEMP_TOPIC_TYPE: return (ActiveMQDestination) session.createTemporaryTopic(); default: throw new IllegalArgumentException("type: " + type); } } public void makeSureCoreQueueExist(String qname) throws Exception { SimpleString coreQ = testQueues.get(qname); if (coreQ == null) { coreQ = new SimpleString(qname); this.server.createQueue(coreQ, RoutingType.ANYCAST, coreQ, null, false, false, -1, false, true); testQueues.put(qname, coreQ); } } public ActiveMQDestination createDestination(Session session, byte type) throws JMSException { switch (type) { case ActiveMQDestination.QUEUE_TYPE: return (ActiveMQDestination) session.createQueue(queueName); case ActiveMQDestination.TOPIC_TYPE: return (ActiveMQDestination) session.createTopic(topicName); case ActiveMQDestination.TEMP_QUEUE_TYPE: return (ActiveMQDestination) session.createTemporaryQueue(); case ActiveMQDestination.TEMP_TOPIC_TYPE: return (ActiveMQDestination) session.createTemporaryTopic(); default: throw new IllegalArgumentException("type: " + type); } } protected ActiveMQDestination createDestination2(Session session, byte type) throws JMSException { switch (type) { case ActiveMQDestination.QUEUE_TYPE: return (ActiveMQDestination) session.createQueue(queueName2); case ActiveMQDestination.TOPIC_TYPE: return (ActiveMQDestination) session.createTopic(topicName2); case ActiveMQDestination.TEMP_QUEUE_TYPE: return (ActiveMQDestination) session.createTemporaryQueue(); case ActiveMQDestination.TEMP_TOPIC_TYPE: return (ActiveMQDestination) session.createTemporaryTopic(); default: throw new IllegalArgumentException("type: " + type); } } protected void sendMessages(Session session, Destination destination, int count) throws JMSException { MessageProducer producer = session.createProducer(destination); sendMessages(session, producer, count); producer.close(); } protected void sendMessages(Session session, MessageProducer producer, int count) throws JMSException { for (int i = 0; i < count; i++) { producer.send(session.createTextMessage(messageTextPrefix + i)); } } protected void sendMessages(Connection connection, Destination destination, int count) throws JMSException { Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); sendMessages(session, destination, count); session.close(); } /** * @param messsage * @param firstSet * @param secondSet */ protected void assertTextMessagesEqual(String messsage, Message[] firstSet, Message[] secondSet) throws JMSException { assertEquals("Message count does not match: " + messsage, firstSet.length, secondSet.length); for (int i = 0; i < secondSet.length; i++) { TextMessage m1 = (TextMessage) firstSet[i]; TextMessage m2 = (TextMessage) secondSet[i]; assertFalse("Message " + (i + 1) + " did not match : " + messsage + ": expected {" + m1 + "}, but was {" + m2 + "}", m1 == null ^ m2 == null); assertEquals("Message " + (i + 1) + " did not match: " + messsage + ": expected {" + m1 + "}, but was {" + m2 + "}", m1.getText(), m2.getText()); } } protected Connection createConnection() throws JMSException { return factory.createConnection(); } protected void safeClose(Session s) { try { s.close(); } catch (Throwable e) { } } }