| /** |
| * 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.transport.stomp; |
| |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertFalse; |
| import static org.junit.Assert.assertTrue; |
| |
| import java.util.Arrays; |
| import java.util.UUID; |
| |
| import org.apache.activemq.command.ActiveMQDestination; |
| import org.junit.Before; |
| import org.junit.Test; |
| import org.mockito.Mockito; |
| import org.mockito.invocation.InvocationOnMock; |
| import org.mockito.stubbing.Answer; |
| |
| /** |
| * Tests for conversion capabilities of LegacyFrameTranslator |
| */ |
| public class LegacyFrameTranslatorTest { |
| |
| private ProtocolConverter converter; |
| private LegacyFrameTranslator translator; |
| |
| @Before |
| public void setUp() { |
| converter = Mockito.mock(ProtocolConverter.class); |
| |
| // Stub out a temp destination creation |
| Mockito.when(converter.createTempDestination(Mockito.anyString(), Mockito.anyBoolean())).thenAnswer(new Answer<ActiveMQDestination>() { |
| |
| @Override |
| public ActiveMQDestination answer(InvocationOnMock invocation) throws Throwable { |
| |
| String name = invocation.getArgumentAt(0, String.class); |
| boolean topic = invocation.getArgumentAt(1, Boolean.class); |
| |
| name = "temp-" + (topic ? "topic://" : "queue://X:") + UUID.randomUUID().toString(); |
| |
| return ActiveMQDestination.createDestination(name, ActiveMQDestination.QUEUE_TYPE); |
| } |
| }); |
| |
| translator = new LegacyFrameTranslator(); |
| } |
| |
| @Test(timeout = 10000) |
| public void testConvertQueue() throws Exception { |
| ActiveMQDestination destination = translator.convertDestination(converter, "/queue/test", false); |
| |
| assertFalse(destination.isComposite()); |
| assertEquals("test", destination.getPhysicalName()); |
| assertEquals(ActiveMQDestination.QUEUE_TYPE, destination.getDestinationType()); |
| } |
| |
| @Test(timeout = 10000) |
| public void testConvertTopic() throws Exception { |
| ActiveMQDestination destination = translator.convertDestination(converter, "/topic/test", false); |
| |
| assertFalse(destination.isComposite()); |
| assertEquals("test", destination.getPhysicalName()); |
| assertEquals(ActiveMQDestination.TOPIC_TYPE, destination.getDestinationType()); |
| } |
| |
| @Test(timeout = 10000) |
| public void testConvertTemporaryQueue() throws Exception { |
| ActiveMQDestination destination = translator.convertDestination(converter, "/temp-queue/test", false); |
| |
| assertFalse(destination.isComposite()); |
| assertEquals(ActiveMQDestination.TEMP_QUEUE_TYPE, destination.getDestinationType()); |
| } |
| |
| @Test(timeout = 10000) |
| public void testConvertTemporaryTopic() throws Exception { |
| ActiveMQDestination destination = translator.convertDestination(converter, "/temp-topic/test", false); |
| |
| assertFalse(destination.isComposite()); |
| assertEquals(ActiveMQDestination.TEMP_TOPIC_TYPE, destination.getDestinationType()); |
| } |
| |
| @Test(timeout = 10000) |
| public void testConvertRemoteTempQueue() throws Exception { |
| ActiveMQDestination destination = translator.convertDestination(converter, "/remote-temp-queue/test", false); |
| |
| assertFalse(destination.isComposite()); |
| assertEquals("test", destination.getPhysicalName()); |
| assertEquals(ActiveMQDestination.TEMP_QUEUE_TYPE, destination.getDestinationType()); |
| } |
| |
| @Test(timeout = 10000) |
| public void testConvertRemoteTempTopic() throws Exception { |
| ActiveMQDestination destination = translator.convertDestination(converter, "/remote-temp-topic/test", false); |
| |
| assertFalse(destination.isComposite()); |
| assertEquals("test", destination.getPhysicalName()); |
| assertEquals(ActiveMQDestination.TEMP_TOPIC_TYPE, destination.getDestinationType()); |
| } |
| |
| @Test(timeout = 10000) |
| public void testConvertCompositeQueues() throws Exception { |
| String destinationA = "destinationA"; |
| String destinationB = "destinationB"; |
| |
| String composite = "/queue/" + destinationA + ",/queue/" + destinationB; |
| |
| ActiveMQDestination destination = translator.convertDestination(converter, composite, false); |
| |
| assertEquals(ActiveMQDestination.QUEUE_TYPE, destination.getDestinationType()); |
| assertTrue(destination.isComposite()); |
| ActiveMQDestination[] composites = destination.getCompositeDestinations(); |
| assertEquals(2, composites.length); |
| |
| Arrays.sort(composites); |
| |
| assertEquals(ActiveMQDestination.QUEUE_TYPE, composites[0].getDestinationType()); |
| assertEquals(ActiveMQDestination.QUEUE_TYPE, composites[1].getDestinationType()); |
| |
| assertEquals(destinationA, composites[0].getPhysicalName()); |
| assertEquals(destinationB, composites[1].getPhysicalName()); |
| } |
| |
| @Test(timeout = 10000) |
| public void testConvertCompositeTopics() throws Exception { |
| String destinationA = "destinationA"; |
| String destinationB = "destinationB"; |
| |
| String composite = "/topic/" + destinationA + ",/topic/" + destinationB; |
| |
| ActiveMQDestination destination = translator.convertDestination(converter, composite, false); |
| |
| assertEquals(ActiveMQDestination.TOPIC_TYPE, destination.getDestinationType()); |
| assertTrue(destination.isComposite()); |
| ActiveMQDestination[] composites = destination.getCompositeDestinations(); |
| assertEquals(2, composites.length); |
| |
| Arrays.sort(composites); |
| |
| assertEquals(ActiveMQDestination.TOPIC_TYPE, composites[0].getDestinationType()); |
| assertEquals(ActiveMQDestination.TOPIC_TYPE, composites[1].getDestinationType()); |
| |
| assertEquals(destinationA, composites[0].getPhysicalName()); |
| assertEquals(destinationB, composites[1].getPhysicalName()); |
| } |
| |
| @Test(timeout = 10000) |
| public void testConvertCompositeQueueAndTopic() throws Exception { |
| String destinationA = "destinationA"; |
| String destinationB = "destinationB"; |
| |
| String composite = "/queue/" + destinationA + ",/topic/" + destinationB; |
| |
| ActiveMQDestination destination = translator.convertDestination(converter, composite, false); |
| |
| assertEquals(ActiveMQDestination.QUEUE_TYPE, destination.getDestinationType()); |
| assertTrue(destination.isComposite()); |
| ActiveMQDestination[] composites = destination.getCompositeDestinations(); |
| assertEquals(2, composites.length); |
| |
| Arrays.sort(composites); |
| |
| assertEquals(ActiveMQDestination.QUEUE_TYPE, composites[0].getDestinationType()); |
| assertEquals(ActiveMQDestination.TOPIC_TYPE, composites[1].getDestinationType()); |
| |
| assertEquals(destinationA, composites[0].getPhysicalName()); |
| assertEquals(destinationB, composites[1].getPhysicalName()); |
| } |
| |
| @Test(timeout = 10000) |
| public void testConvertCompositeMixture() throws Exception { |
| String destinationA = "destinationA"; |
| String destinationB = "destinationB"; |
| String destinationC = "destinationC"; |
| String destinationD = "destinationD"; |
| |
| String composite = "/queue/" + destinationA + ",/topic/" + destinationB + |
| ",/temp-queue/" + destinationC + ",/temp-topic/" + destinationD; |
| |
| ActiveMQDestination destination = translator.convertDestination(converter, composite, false); |
| |
| assertEquals(ActiveMQDestination.QUEUE_TYPE, destination.getDestinationType()); |
| assertTrue(destination.isComposite()); |
| ActiveMQDestination[] composites = destination.getCompositeDestinations(); |
| assertEquals(4, composites.length); |
| |
| Arrays.sort(composites); |
| |
| boolean foundQueue = false; |
| boolean foundTopic = false; |
| boolean foundTempTopic = false; |
| boolean foundTempQueue = false; |
| |
| for (ActiveMQDestination dest : composites) { |
| if (dest.getDestinationType() == ActiveMQDestination.QUEUE_TYPE) { |
| foundQueue = true; |
| } else if (dest.getDestinationType() == ActiveMQDestination.TOPIC_TYPE) { |
| foundTopic = true; |
| } else if (dest.getDestinationType() == ActiveMQDestination.TEMP_TOPIC_TYPE) { |
| foundTempTopic = true; |
| } else if (dest.getDestinationType() == ActiveMQDestination.TEMP_QUEUE_TYPE) { |
| foundTempQueue = true; |
| } |
| } |
| |
| assertTrue(foundQueue); |
| assertTrue(foundTopic); |
| assertTrue(foundTempTopic); |
| assertTrue(foundTempQueue); |
| } |
| } |