/* * 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.unit.jms.client; import org.apache.activemq.artemis.tests.util.ActiveMQTestBase; import org.apache.activemq.artemis.utils.SelectorTranslator; import org.junit.Assert; import org.junit.Test; public class SelectorTranslatorTest extends ActiveMQTestBase { @Test public void testParseNull() { Assert.assertNull(SelectorTranslator.convertToActiveMQFilterString(null)); } @Test public void testParseSimple() { final String selector = "color = 'red'"; Assert.assertEquals(selector, SelectorTranslator.convertToActiveMQFilterString(selector)); } @Test public void testParseMoreComplex() { final String selector = "color = 'red' OR cheese = 'stilton' OR (age = 3 AND shoesize = 12)"; Assert.assertEquals(selector, SelectorTranslator.convertToActiveMQFilterString(selector)); } @Test public void testParseJMSDeliveryMode() { String selector = "JMSDeliveryMode='NON_PERSISTENT'"; Assert.assertEquals("AMQDurable='NON_DURABLE'", SelectorTranslator.convertToActiveMQFilterString(selector)); selector = "JMSDeliveryMode='PERSISTENT'"; Assert.assertEquals("AMQDurable='DURABLE'", SelectorTranslator.convertToActiveMQFilterString(selector)); selector = "color = 'red' AND 'NON_PERSISTENT' = JMSDeliveryMode"; Assert.assertEquals("color = 'red' AND 'NON_DURABLE' = AMQDurable", SelectorTranslator.convertToActiveMQFilterString(selector)); selector = "color = 'red' AND 'PERSISTENT' = JMSDeliveryMode"; Assert.assertEquals("color = 'red' AND 'DURABLE' = AMQDurable", SelectorTranslator.convertToActiveMQFilterString(selector)); checkNoSubstitute("JMSDeliveryMode"); } @Test public void testParseJMSPriority() { String selector = "JMSPriority=5"; Assert.assertEquals("AMQPriority=5", SelectorTranslator.convertToActiveMQFilterString(selector)); selector = " JMSPriority = 7"; Assert.assertEquals(" AMQPriority = 7", SelectorTranslator.convertToActiveMQFilterString(selector)); selector = " JMSPriority = 7 OR 1 = JMSPriority AND (JMSPriority= 1 + 4)"; Assert.assertEquals(" AMQPriority = 7 OR 1 = AMQPriority AND (AMQPriority= 1 + 4)", SelectorTranslator.convertToActiveMQFilterString(selector)); checkNoSubstitute("JMSPriority"); selector = "animal = 'lion' JMSPriority = 321 OR animal_name = 'xyzJMSPriorityxyz'"; Assert.assertEquals("animal = 'lion' AMQPriority = 321 OR animal_name = 'xyzJMSPriorityxyz'", SelectorTranslator.convertToActiveMQFilterString(selector)); } @Test public void testParseJMSMessageID() { String selector = "JMSMessageID='ID:AMQ-12435678"; Assert.assertEquals("AMQUserID='ID:AMQ-12435678", SelectorTranslator.convertToActiveMQFilterString(selector)); selector = " JMSMessageID='ID:AMQ-12435678"; Assert.assertEquals(" AMQUserID='ID:AMQ-12435678", SelectorTranslator.convertToActiveMQFilterString(selector)); selector = " JMSMessageID = 'ID:AMQ-12435678"; Assert.assertEquals(" AMQUserID = 'ID:AMQ-12435678", SelectorTranslator.convertToActiveMQFilterString(selector)); selector = " myHeader = JMSMessageID"; Assert.assertEquals(" myHeader = AMQUserID", SelectorTranslator.convertToActiveMQFilterString(selector)); selector = " myHeader = JMSMessageID OR (JMSMessageID = 'ID-AMQ' + '12345')"; Assert.assertEquals(" myHeader = AMQUserID OR (AMQUserID = 'ID-AMQ' + '12345')", SelectorTranslator.convertToActiveMQFilterString(selector)); checkNoSubstitute("JMSMessageID"); } @Test public void testParseJMSTimestamp() { String selector = "JMSTimestamp=12345678"; Assert.assertEquals("AMQTimestamp=12345678", SelectorTranslator.convertToActiveMQFilterString(selector)); selector = " JMSTimestamp=12345678"; Assert.assertEquals(" AMQTimestamp=12345678", SelectorTranslator.convertToActiveMQFilterString(selector)); selector = " JMSTimestamp=12345678 OR 78766 = JMSTimestamp AND (JMSTimestamp= 1 + 4878787)"; Assert.assertEquals(" AMQTimestamp=12345678 OR 78766 = AMQTimestamp AND (AMQTimestamp= 1 + 4878787)", SelectorTranslator.convertToActiveMQFilterString(selector)); checkNoSubstitute("JMSTimestamp"); selector = "animal = 'lion' JMSTimestamp = 321 OR animal_name = 'xyzJMSTimestampxyz'"; Assert.assertEquals("animal = 'lion' AMQTimestamp = 321 OR animal_name = 'xyzJMSTimestampxyz'", SelectorTranslator.convertToActiveMQFilterString(selector)); } @Test public void testParseJMSExpiration() { String selector = "JMSExpiration=12345678"; Assert.assertEquals("AMQExpiration=12345678", SelectorTranslator.convertToActiveMQFilterString(selector)); selector = " JMSExpiration=12345678"; Assert.assertEquals(" AMQExpiration=12345678", SelectorTranslator.convertToActiveMQFilterString(selector)); selector = " JMSExpiration=12345678 OR 78766 = JMSExpiration AND (JMSExpiration= 1 + 4878787)"; Assert.assertEquals(" AMQExpiration=12345678 OR 78766 = AMQExpiration AND (AMQExpiration= 1 + 4878787)", SelectorTranslator.convertToActiveMQFilterString(selector)); checkNoSubstitute("JMSExpiration"); selector = "animal = 'lion' JMSExpiration = 321 OR animal_name = 'xyzJMSExpirationxyz'"; Assert.assertEquals("animal = 'lion' AMQExpiration = 321 OR animal_name = 'xyzJMSExpirationxyz'", SelectorTranslator.convertToActiveMQFilterString(selector)); } @Test public void testParseJMSCorrelationID() { String selector = "JMSCorrelationID='ID:AMQ-12435678"; Assert.assertEquals(selector, SelectorTranslator.convertToActiveMQFilterString(selector)); selector = " JMSCorrelationID='ID:AMQ-12435678"; Assert.assertEquals(selector, SelectorTranslator.convertToActiveMQFilterString(selector)); selector = " JMSCorrelationID = 'ID:AMQ-12435678"; Assert.assertEquals(selector, SelectorTranslator.convertToActiveMQFilterString(selector)); selector = " myHeader = JMSCorrelationID"; Assert.assertEquals(selector, SelectorTranslator.convertToActiveMQFilterString(selector)); selector = " myHeader = JMSCorrelationID OR (JMSCorrelationID = 'ID-AMQ' + '12345')"; Assert.assertEquals(selector, SelectorTranslator.convertToActiveMQFilterString(selector)); checkNoSubstitute("JMSCorrelationID"); } @Test public void testParseJMSType() { String selector = "JMSType='aardvark'"; Assert.assertEquals(selector, SelectorTranslator.convertToActiveMQFilterString(selector)); selector = " JMSType='aardvark'"; Assert.assertEquals(selector, SelectorTranslator.convertToActiveMQFilterString(selector)); selector = " JMSType = 'aardvark'"; Assert.assertEquals(selector, SelectorTranslator.convertToActiveMQFilterString(selector)); selector = " myHeader = JMSType"; Assert.assertEquals(selector, SelectorTranslator.convertToActiveMQFilterString(selector)); selector = " myHeader = JMSType OR (JMSType = 'aardvark' + 'sandwich')"; Assert.assertEquals(selector, SelectorTranslator.convertToActiveMQFilterString(selector)); checkNoSubstitute("JMSType"); } // Private ------------------------------------------------------------------------------------- private void checkNoSubstitute(final String fieldName) { String selector = "Other" + fieldName + " = 767868"; Assert.assertEquals(selector, SelectorTranslator.convertToActiveMQFilterString(selector)); selector = "cheese = 'cheddar' AND Wrong" + fieldName + " = 54"; Assert.assertEquals(selector, SelectorTranslator.convertToActiveMQFilterString(selector)); selector = "fruit = 'pomegranate' AND " + fieldName + "NotThisOne = 'tuesday'"; Assert.assertEquals(selector, SelectorTranslator.convertToActiveMQFilterString(selector)); selector = "animal = 'lion' AND animal_name = '" + fieldName + "'"; Assert.assertEquals(selector, SelectorTranslator.convertToActiveMQFilterString(selector)); selector = "animal = 'lion' AND animal_name = ' " + fieldName + "'"; Assert.assertEquals(selector, SelectorTranslator.convertToActiveMQFilterString(selector)); selector = "animal = 'lion' AND animal_name = ' " + fieldName + " '"; Assert.assertEquals(selector, SelectorTranslator.convertToActiveMQFilterString(selector)); selector = "animal = 'lion' AND animal_name = 'xyz " + fieldName + "'"; Assert.assertEquals(selector, SelectorTranslator.convertToActiveMQFilterString(selector)); selector = "animal = 'lion' AND animal_name = 'xyz" + fieldName + "'"; Assert.assertEquals(selector, SelectorTranslator.convertToActiveMQFilterString(selector)); selector = "animal = 'lion' AND animal_name = '" + fieldName + "xyz'"; Assert.assertEquals(selector, SelectorTranslator.convertToActiveMQFilterString(selector)); selector = "animal = 'lion' AND animal_name = 'xyz" + fieldName + "xyz'"; Assert.assertEquals(selector, SelectorTranslator.convertToActiveMQFilterString(selector)); } }