From commits-return-50202-archive-asf-public=cust-asf.ponee.io@activemq.apache.org Thu Jan 18 16:18:56 2018 Return-Path: X-Original-To: archive-asf-public@eu.ponee.io Delivered-To: archive-asf-public@eu.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by mx-eu-01.ponee.io (Postfix) with ESMTP id 759D5180654 for ; Thu, 18 Jan 2018 16:18:56 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id 65871160C36; Thu, 18 Jan 2018 15:18:56 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id B455F160C2B for ; Thu, 18 Jan 2018 16:18:54 +0100 (CET) Received: (qmail 6343 invoked by uid 500); 18 Jan 2018 15:18:51 -0000 Mailing-List: contact commits-help@activemq.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@activemq.apache.org Delivered-To: mailing list commits@activemq.apache.org Received: (qmail 6301 invoked by uid 99); 18 Jan 2018 15:18:51 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 18 Jan 2018 15:18:51 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id C6B90DFBAA; Thu, 18 Jan 2018 15:18:50 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: clebertsuconic@apache.org To: commits@activemq.apache.org Date: Thu, 18 Jan 2018 15:18:50 -0000 Message-Id: <188ccfcc0a4f47a6bb67fed0ef1fda15@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [1/2] activemq-artemis git commit: ARTEMIS-1577 Address-settings policies not working with older clients Repository: activemq-artemis Updated Branches: refs/heads/master 842821990 -> 9f7751422 ARTEMIS-1577 Address-settings policies not working with older clients This closes #1744 Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/9dbc5dc4 Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/9dbc5dc4 Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/9dbc5dc4 Branch: refs/heads/master Commit: 9dbc5dc409fa265dc938167a38d52dadeca29445 Parents: 8428219 Author: Clebert Suconic Authored: Wed Jan 17 15:03:59 2018 -0500 Committer: Clebert Suconic Committed: Thu Jan 18 10:18:39 2018 -0500 ---------------------------------------------------------------------- .../core/postoffice/impl/PostOfficeImpl.java | 18 +-- .../artemis/core/server/RoutingContext.java | 3 +- .../artemis/core/server/impl/DivertImpl.java | 2 +- .../core/server/impl/RoutingContextImpl.java | 6 +- .../artemis/tests/compatibility/GroovyRun.java | 37 +++--- .../addressConfig/artemisServer.groovy | 50 +++++++ .../addressConfig/receiveMessages.groovy | 47 +++++++ .../addressConfig/sendMessagesAddress.groovy | 50 +++++++ .../main/resources/clients/hornetqClient.groovy | 2 +- .../tests/compatibility/AddressConfigTest.java | 130 +++++++++++++++++++ .../tests/compatibility/ExportImportTest.java | 10 +- .../compatibility/JournalCompatibilityTest.java | 4 +- .../artemis/tests/compatibility/MeshTest.java | 8 +- .../tests/compatibility/SendAckTest.java | 4 +- .../tests/compatibility/SerializationTest.java | 8 +- .../tests/compatibility/VersionedBaseTest.java | 36 +++-- 16 files changed, 354 insertions(+), 61 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/9dbc5dc4/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeImpl.java ---------------------------------------------------------------------- diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeImpl.java index 50f2b58..6f731e5 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeImpl.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeImpl.java @@ -736,11 +736,11 @@ public class PostOfficeImpl implements PostOffice, NotificationListener, Binding throw new IllegalStateException("Message cannot be routed more than once"); } - setPagingStore(message); + setPagingStore(context.getAddress(message), message); AtomicBoolean startedTX = new AtomicBoolean(false); - final SimpleString address = message.getAddressSimpleString(); + final SimpleString address = context.getAddress(message); applyExpiryDelay(message, address); @@ -750,7 +750,7 @@ public class PostOfficeImpl implements PostOffice, NotificationListener, Binding message.cleanupInternalProperties(); - Bindings bindings = addressManager.getBindingsForRoutingAddress(context.getAddress() == null ? message.getAddressSimpleString() : context.getAddress()); + Bindings bindings = addressManager.getBindingsForRoutingAddress(context.getAddress(message)); // TODO auto-create queues here? // first check for the auto-queue creation thing @@ -854,7 +854,7 @@ public class PostOfficeImpl implements PostOffice, NotificationListener, Binding @Override public MessageReference reroute(final Message message, final Queue queue, final Transaction tx) throws Exception { - setPagingStore(message); + setPagingStore(queue.getAddress(), message); MessageReference reference = MessageReference.Factory.createReference(message, queue); @@ -1040,8 +1040,8 @@ public class PostOfficeImpl implements PostOffice, NotificationListener, Binding // Private ----------------------------------------------------------------- - private void setPagingStore(final Message message) throws Exception { - PagingStore store = pagingManager.getPageStore(message.getAddressSimpleString()); + private void setPagingStore(SimpleString address, Message message) throws Exception { + PagingStore store = pagingManager.getPageStore(address); message.setContext(store); } @@ -1122,7 +1122,7 @@ public class PostOfficeImpl implements PostOffice, NotificationListener, Binding MessageReference reference = MessageReference.Factory.createReference(message, queue); - if (context.isAlreadyAcked(message.getAddressSimpleString(), queue)) { + if (context.isAlreadyAcked(context.getAddress(message), queue)) { reference.setAlreadyAcked(); if (tx != null) { queue.acknowledge(tx, reference); @@ -1261,7 +1261,7 @@ public class PostOfficeImpl implements PostOffice, NotificationListener, Binding // if the message is being sent from the bridge, we just ignore the duplicate id, and use the internal one byte[] bridgeDupBytes = (byte[]) bridgeDup; - DuplicateIDCache cacheBridge = getDuplicateIDCache(BRIDGE_CACHE_STR.concat(message.getAddress())); + DuplicateIDCache cacheBridge = getDuplicateIDCache(BRIDGE_CACHE_STR.concat(context.getAddress(message).toString())); if (context.getTransaction() == null) { context.setTransaction(new TransactionImpl(storageManager)); @@ -1284,7 +1284,7 @@ public class PostOfficeImpl implements PostOffice, NotificationListener, Binding boolean isDuplicate = false; if (duplicateIDBytes != null) { - cache = getDuplicateIDCache(message.getAddressSimpleString()); + cache = getDuplicateIDCache(context.getAddress(message)); isDuplicate = cache.contains(duplicateIDBytes); http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/9dbc5dc4/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/RoutingContext.java ---------------------------------------------------------------------- diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/RoutingContext.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/RoutingContext.java index 7b64b5e..9b09256 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/RoutingContext.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/RoutingContext.java @@ -19,6 +19,7 @@ package org.apache.activemq.artemis.core.server; import java.util.List; import java.util.Map; +import org.apache.activemq.artemis.api.core.Message; import org.apache.activemq.artemis.api.core.RoutingType; import org.apache.activemq.artemis.api.core.SimpleString; import org.apache.activemq.artemis.core.transaction.Transaction; @@ -51,7 +52,7 @@ public interface RoutingContext { void setRoutingType(RoutingType routingType); - SimpleString getAddress(); + SimpleString getAddress(Message message); RoutingType getRoutingType(); } http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/9dbc5dc4/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/DivertImpl.java ---------------------------------------------------------------------- diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/DivertImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/DivertImpl.java index 9b5e261..e28d011 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/DivertImpl.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/DivertImpl.java @@ -93,7 +93,7 @@ public class DivertImpl implements Divert { Message copy = null; // Shouldn't copy if it's not routed anywhere else - if (!forwardAddress.equals(context.getAddress())) { + if (!forwardAddress.equals(context.getAddress(message))) { long id = storageManager.generateID(); copy = message.copy(id); http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/9dbc5dc4/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/RoutingContextImpl.java ---------------------------------------------------------------------- diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/RoutingContextImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/RoutingContextImpl.java index 0b90144..feb12f9 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/RoutingContextImpl.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/RoutingContextImpl.java @@ -21,6 +21,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.apache.activemq.artemis.api.core.Message; import org.apache.activemq.artemis.api.core.SimpleString; import org.apache.activemq.artemis.core.server.Queue; import org.apache.activemq.artemis.core.server.RouteContextList; @@ -92,7 +93,10 @@ public final class RoutingContextImpl implements RoutingContext { } @Override - public SimpleString getAddress() { + public SimpleString getAddress(Message message) { + if (address == null && message != null) { + return message.getAddressSimpleString(); + } return address; } http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/9dbc5dc4/tests/compatibility-tests/src/main/java/org/apache/activemq/artemis/tests/compatibility/GroovyRun.java ---------------------------------------------------------------------- diff --git a/tests/compatibility-tests/src/main/java/org/apache/activemq/artemis/tests/compatibility/GroovyRun.java b/tests/compatibility-tests/src/main/java/org/apache/activemq/artemis/tests/compatibility/GroovyRun.java index c66a518..46b6cec 100644 --- a/tests/compatibility-tests/src/main/java/org/apache/activemq/artemis/tests/compatibility/GroovyRun.java +++ b/tests/compatibility-tests/src/main/java/org/apache/activemq/artemis/tests/compatibility/GroovyRun.java @@ -34,30 +34,25 @@ public class GroovyRun { public static final String HORNETQ_235 = "HORNETQ-235"; public static final String HORNETQ_247 = "HORNETQ-247"; - public static final String WORD_START = "**SERVER STARTED**"; - public static Binding binding = new Binding(); public static GroovyShell shell = new GroovyShell(binding); - // Called with reflection - public static void doTest(String script, String... arg) throws Throwable { - int i = 0; - for (String a : arg) { - System.out.println("[" + (i++) + "]=" + a); - } - System.out.println(); - - evaluate(script, "arg", arg); - - System.out.println(WORD_START); - } - /** * This can be called from the scripts as well. * The scripts will use this method instead of its own groovy method. * As a classloader operation needs to be done here. */ - public static void evaluate(String script, + public static Object evaluate(String script, + String[] arg) throws URISyntaxException, IOException { + return evaluate(script, "arg", arg); + } + + /** + * This can be called from the scripts as well. + * The scripts will use this method instead of its own groovy method. + * As a classloader operation needs to be done here. + */ + public static Object evaluate(String script, String argVariableName, String[] arg) throws URISyntaxException, IOException { URL scriptURL = GroovyRun.class.getClassLoader().getResource(script); @@ -68,16 +63,20 @@ public class GroovyRun { setVariable(argVariableName, arg); - shell.evaluate(scriptURI); + return shell.evaluate(scriptURI); } public static void setVariable(String name, Object arg) { binding.setVariable(name, arg); } + public static Object getVariable(String name) { + return binding.getVariable(name); + } + // Called with reflection - public static void execute(String script) throws Throwable { - shell.evaluate(script); + public static Object execute(String script) throws Throwable { + return shell.evaluate(script); } public static void assertNotNull(Object value) { http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/9dbc5dc4/tests/compatibility-tests/src/main/resources/addressConfig/artemisServer.groovy ---------------------------------------------------------------------- diff --git a/tests/compatibility-tests/src/main/resources/addressConfig/artemisServer.groovy b/tests/compatibility-tests/src/main/resources/addressConfig/artemisServer.groovy new file mode 100644 index 0000000..854f542 --- /dev/null +++ b/tests/compatibility-tests/src/main/resources/addressConfig/artemisServer.groovy @@ -0,0 +1,50 @@ +package servers +/* + * 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. + */ + +// starts an artemis server + +import org.apache.activemq.artemis.core.config.impl.ConfigurationImpl; +import org.apache.activemq.artemis.core.server.JournalType +import org.apache.activemq.artemis.core.settings.impl.AddressFullMessagePolicy; +import org.apache.activemq.artemis.core.settings.impl.AddressSettings; +import org.apache.activemq.artemis.jms.server.config.impl.JMSConfigurationImpl; +import org.apache.activemq.artemis.jms.server.embedded.EmbeddedJMS +import org.apache.activemq.artemis.tests.compatibility.GroovyRun; + + +String folder = arg[0]; +String id = "server" + +configuration = new ConfigurationImpl(); +configuration.setJournalType(JournalType.NIO); +System.out.println("folder:: " + folder); +configuration.setBrokerInstance(new File(folder + "/" + id)); +configuration.addAcceptorConfiguration("artemis", "tcp://0.0.0.0:61616"); +configuration.setSecurityEnabled(false); +configuration.setPersistenceEnabled(false); +configuration.addAddressesSetting("myQueue", new AddressSettings().setAddressFullMessagePolicy(AddressFullMessagePolicy.PAGE).setMaxSizeBytes(1024 * 1024 * 1024).setPageSizeBytes(1024)); +// if the client is using the wrong address, it will wrongly block +configuration.addAddressesSetting("#", new AddressSettings().setAddressFullMessagePolicy(AddressFullMessagePolicy.BLOCK).setMaxSizeBytes(10 * 1024).setPageSizeBytes(1024)); +jmsConfiguration = new JMSConfigurationImpl(); + +server = new EmbeddedJMS(); +server.setConfiguration(configuration); +server.setJmsConfiguration(jmsConfiguration); +server.start(); + +server.getJMSServerManager().createQueue(true, "myQueue", null, true); http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/9dbc5dc4/tests/compatibility-tests/src/main/resources/addressConfig/receiveMessages.groovy ---------------------------------------------------------------------- diff --git a/tests/compatibility-tests/src/main/resources/addressConfig/receiveMessages.groovy b/tests/compatibility-tests/src/main/resources/addressConfig/receiveMessages.groovy new file mode 100644 index 0000000..06b825a --- /dev/null +++ b/tests/compatibility-tests/src/main/resources/addressConfig/receiveMessages.groovy @@ -0,0 +1,47 @@ +package meshTest + +import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory +import org.apache.activemq.artemis.tests.compatibility.GroovyRun + +import javax.jms.* + +/* + * 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. + */ + + +ConnectionFactory cf = new ActiveMQConnectionFactory(); +Connection connection = cf.createConnection(); +Session session = connection.createSession(true, Session.SESSION_TRANSACTED); +Queue queue = session.createQueue("myQueue"); + +System.out.println("Receiving "); +MessageConsumer consumer = session.createConsumer(queue) +connection.start() +for (int i = 0; i < 500; i++) { + BytesMessage bytesMessage = (BytesMessage) consumer.receive(5000); + GroovyRun.assertNotNull(bytesMessage) + if (i % 100) { + session.commit(); + } +} +session.commit(); + +// Defined on AddressConfigTest.java at the test with setVariable +latch.countDown(); + + + http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/9dbc5dc4/tests/compatibility-tests/src/main/resources/addressConfig/sendMessagesAddress.groovy ---------------------------------------------------------------------- diff --git a/tests/compatibility-tests/src/main/resources/addressConfig/sendMessagesAddress.groovy b/tests/compatibility-tests/src/main/resources/addressConfig/sendMessagesAddress.groovy new file mode 100644 index 0000000..a1198b8 --- /dev/null +++ b/tests/compatibility-tests/src/main/resources/addressConfig/sendMessagesAddress.groovy @@ -0,0 +1,50 @@ +package meshTest + +import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory + +import javax.jms.* + +/* + * 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. + */ + +ConnectionFactory cf = new ActiveMQConnectionFactory(); +Connection connection = cf.createConnection(); +Session session = connection.createSession(true, Session.SESSION_TRANSACTED); +Queue queue = session.createQueue("myQueue"); + +println("sending...") +MessageProducer producer = session.createProducer(queue); +producer.setDeliveryMode(DeliveryMode.PERSISTENT); + +for (int i = 0; i < 500; i++) { + BytesMessage bytesMessage = session.createBytesMessage(); + bytesMessage.writeBytes(new byte[512]); + producer.send(bytesMessage); + // we send a big batch as that should be enough to cause blocking on the address + // if the wrong address is being used + if (i % 100 == 0) { + session.commit(); + } +} + +session.commit(); + +connection.close(); +System.out.println("Message sent"); + + + http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/9dbc5dc4/tests/compatibility-tests/src/main/resources/clients/hornetqClient.groovy ---------------------------------------------------------------------- diff --git a/tests/compatibility-tests/src/main/resources/clients/hornetqClient.groovy b/tests/compatibility-tests/src/main/resources/clients/hornetqClient.groovy index b04a01a..c9fb6dd 100644 --- a/tests/compatibility-tests/src/main/resources/clients/hornetqClient.groovy +++ b/tests/compatibility-tests/src/main/resources/clients/hornetqClient.groovy @@ -16,7 +16,7 @@ package clients * limitations under the License. */ -// This script is called by sendMessages.groovy +// This script is called by sendMessagesPagingPaging.groovy import org.hornetq.api.core.TransportConfiguration; import org.hornetq.core.remoting.impl.netty.NettyConnectorFactory; http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/9dbc5dc4/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/AddressConfigTest.java ---------------------------------------------------------------------- diff --git a/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/AddressConfigTest.java b/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/AddressConfigTest.java new file mode 100644 index 0000000..cba29af --- /dev/null +++ b/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/AddressConfigTest.java @@ -0,0 +1,130 @@ +/* + * 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.compatibility; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; + +import org.apache.activemq.artemis.utils.FileUtil; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import static org.apache.activemq.artemis.tests.compatibility.GroovyRun.ONE_FIVE; +import static org.apache.activemq.artemis.tests.compatibility.GroovyRun.SNAPSHOT; + +@RunWith(Parameterized.class) +public class AddressConfigTest extends VersionedBaseTest { + + // this will ensure that all tests in this class are run twice, + // once with "true" passed to the class' constructor and once with "false" + @Parameterized.Parameters(name = "server={0}, producer={1}, consumer={2}") + public static Collection getParameters() { + // we don't need every single version ever released.. + // if we keep testing current one against 2.4 and 1.4.. we are sure the wire and API won't change over time + List combinations = new ArrayList<>(); + + /* + // during development sometimes is useful to comment out the combinations + // and add the ones you are interested.. example: + */ + // combinations.add(new Object[]{SNAPSHOT, ONE_FIVE, ONE_FIVE}); + // combinations.add(new Object[]{ONE_FIVE, ONE_FIVE, ONE_FIVE}); + + combinations.addAll(combinatory(new Object[]{SNAPSHOT}, new Object[]{ONE_FIVE, SNAPSHOT}, new Object[]{ONE_FIVE, SNAPSHOT})); + return combinations; + } + + public AddressConfigTest(String server, String sender, String receiver) throws Exception { + super(server, sender, receiver); + } + + + @Before + public void setUp() throws Throwable { + FileUtil.deleteDirectory(serverFolder.getRoot()); + } + + @After + public void stopTest() throws Exception { + execute(serverClassloader, "server.stop()"); + } + + @Test + public void testClientSenderServerAddressSettings() throws Throwable { + evaluate(serverClassloader, "addressConfig/artemisServer.groovy", serverFolder.getRoot().getAbsolutePath()); + + + CountDownLatch latch = new CountDownLatch(1); + + setVariable(receiverClassloader, "latch", latch); + + AtomicInteger errors = new AtomicInteger(0); + + Thread t = new Thread() { + @Override + public void run() { + try { + evaluate(receiverClassloader, "addressConfig/receiveMessages.groovy", "receive"); + } catch (Throwable e) { + errors.incrementAndGet(); + } + } + }; + t.start(); + + + Thread t2 = new Thread() { + @Override + public void run() { + try { + evaluate(senderClassloader, "addressConfig/sendMessagesAddress.groovy", "send"); + } catch (Throwable e) { + errors.incrementAndGet(); + } + } + }; + t2.start(); + + + try { + Assert.assertTrue("Sender is blocking by mistake", latch.await(10, TimeUnit.SECONDS)); + } finally { + + t.join(TimeUnit.SECONDS.toMillis(1)); + t2.join(TimeUnit.SECONDS.toMillis(1)); + + if (t.isAlive()) { + t.interrupt(); + } + + if (t2.isAlive()) { + t2.interrupt(); + } + } + + } + +} http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/9dbc5dc4/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/ExportImportTest.java ---------------------------------------------------------------------- diff --git a/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/ExportImportTest.java b/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/ExportImportTest.java index d40eb30..69fac32 100644 --- a/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/ExportImportTest.java +++ b/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/ExportImportTest.java @@ -108,13 +108,13 @@ public class ExportImportTest extends VersionedBaseTest { setVariable(senderClassloader, "legacy", false); setVariable(senderClassloader, "persistent", true); startServer(serverFolder.getRoot(), senderClassloader, "sender"); - callScript(senderClassloader, "meshTest/sendMessages.groovy", server, sender, "sendAckMessages"); + evaluate(senderClassloader, "meshTest/sendMessages.groovy", server, sender, "sendAckMessages"); stopServer(senderClassloader); if (sender.startsWith("ARTEMIS-1")) { - callScript(senderClassloader, "exportimport/export1X.groovy", serverFolder.getRoot().getAbsolutePath()); + evaluate(senderClassloader, "exportimport/export1X.groovy", serverFolder.getRoot().getAbsolutePath()); } else { - callScript(senderClassloader, "exportimport/export.groovy", serverFolder.getRoot().getAbsolutePath()); + evaluate(senderClassloader, "exportimport/export.groovy", serverFolder.getRoot().getAbsolutePath()); } setVariable(receiverClassloader, "legacy", legacyPrefixes); @@ -124,10 +124,10 @@ public class ExportImportTest extends VersionedBaseTest { setVariable(receiverClassloader, "sort", sender.startsWith("ARTEMIS-1")); - callScript(receiverClassloader, "exportimport/import.groovy", serverFolder.getRoot().getAbsolutePath()); + evaluate(receiverClassloader, "exportimport/import.groovy", serverFolder.getRoot().getAbsolutePath()); setVariable(receiverClassloader, "latch", null); - callScript(receiverClassloader, "meshTest/sendMessages.groovy", server, receiver, "receiveMessages"); + evaluate(receiverClassloader, "meshTest/sendMessages.groovy", server, receiver, "receiveMessages"); } finally { setVariable(receiverClassloader, "legacy", false); } http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/9dbc5dc4/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/JournalCompatibilityTest.java ---------------------------------------------------------------------- diff --git a/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/JournalCompatibilityTest.java b/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/JournalCompatibilityTest.java index 8849c46..40da24c 100644 --- a/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/JournalCompatibilityTest.java +++ b/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/JournalCompatibilityTest.java @@ -95,14 +95,14 @@ public class JournalCompatibilityTest extends VersionedBaseTest { public void testSendReceive() throws Throwable { setVariable(senderClassloader, "persistent", true); startServer(serverFolder.getRoot(), senderClassloader, "journalTest"); - callScript(senderClassloader, "meshTest/sendMessages.groovy", server, sender, "sendAckMessages"); + evaluate(senderClassloader, "meshTest/sendMessages.groovy", server, sender, "sendAckMessages"); stopServer(senderClassloader); setVariable(receiverClassloader, "persistent", true); startServer(serverFolder.getRoot(), receiverClassloader, "journalTest"); setVariable(receiverClassloader, "latch", null); - callScript(receiverClassloader, "meshTest/sendMessages.groovy", server, receiver, "receiveMessages"); + evaluate(receiverClassloader, "meshTest/sendMessages.groovy", server, receiver, "receiveMessages"); } } http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/9dbc5dc4/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/MeshTest.java ---------------------------------------------------------------------- diff --git a/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/MeshTest.java b/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/MeshTest.java index 37978dc..8d4939e 100644 --- a/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/MeshTest.java +++ b/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/MeshTest.java @@ -82,8 +82,8 @@ public class MeshTest extends ServerBaseTest { @Test public void testSendReceive() throws Throwable { setVariable(receiverClassloader, "latch", null); - callScript(senderClassloader, "meshTest/sendMessages.groovy", server, sender, "sendAckMessages"); - callScript(receiverClassloader, "meshTest/sendMessages.groovy", server, receiver, "receiveMessages"); + evaluate(senderClassloader, "meshTest/sendMessages.groovy", server, sender, "sendAckMessages"); + evaluate(receiverClassloader, "meshTest/sendMessages.groovy", server, receiver, "receiveMessages"); } @Test @@ -96,7 +96,7 @@ public class MeshTest extends ServerBaseTest { @Override public void run() { try { - callScript(receiverClassloader, "meshTest/sendMessages.groovy", server, receiver, "receiveNonDurableSubscription"); + evaluate(receiverClassloader, "meshTest/sendMessages.groovy", server, receiver, "receiveNonDurableSubscription"); } catch (Exception e) { e.printStackTrace(); errors.incrementAndGet(); @@ -106,7 +106,7 @@ public class MeshTest extends ServerBaseTest { t.start(); Assert.assertTrue(latch.await(10, TimeUnit.SECONDS)); - callScript(senderClassloader,"meshTest/sendMessages.groovy", server, sender, "sendTopic"); + evaluate(senderClassloader,"meshTest/sendMessages.groovy", server, sender, "sendTopic"); t.join(); http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/9dbc5dc4/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/SendAckTest.java ---------------------------------------------------------------------- diff --git a/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/SendAckTest.java b/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/SendAckTest.java index e915679..7fe9eb4 100644 --- a/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/SendAckTest.java +++ b/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/SendAckTest.java @@ -76,8 +76,8 @@ public class SendAckTest extends ServerBaseTest { @Test public void testSendReceive() throws Throwable { - callScript(senderClassloader, "sendAckTest/sendAckMessages.groovy", server, sender, "sendAckMessages"); - callScript(receiverClassloader, "sendAckTest/sendAckMessages.groovy", server, receiver, "receiveMessages"); + evaluate(senderClassloader, "sendAckTest/sendAckMessages.groovy", server, sender, "sendAckMessages"); + evaluate(receiverClassloader, "sendAckTest/sendAckMessages.groovy", server, receiver, "receiveMessages"); } } http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/9dbc5dc4/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/SerializationTest.java ---------------------------------------------------------------------- diff --git a/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/SerializationTest.java b/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/SerializationTest.java index 2c017f2..cd7daf2 100644 --- a/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/SerializationTest.java +++ b/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/SerializationTest.java @@ -91,15 +91,15 @@ public class SerializationTest extends VersionedBaseTest { @Test public void testSerializeFactory() throws Throwable { File file = serverFolder.newFile("objects.ser"); - callScript(senderClassloader, "serial/serial.groovy", file.getAbsolutePath(), "write", sender); - callScript(receiverClassloader, "serial/serial.groovy", file.getAbsolutePath(), "read", receiver); + evaluate(senderClassloader, "serial/serial.groovy", file.getAbsolutePath(), "write", sender); + evaluate(receiverClassloader, "serial/serial.groovy", file.getAbsolutePath(), "read", receiver); } @Test public void testJBMSerializeFactory() throws Throwable { File file = serverFolder.newFile("objectsjbm.ser"); - callScript(senderClassloader, "serial/jbmserial.groovy", file.getAbsolutePath(), "write", sender); - callScript(receiverClassloader, "serial/jbmserial.groovy", file.getAbsolutePath(), "read", receiver); + evaluate(senderClassloader, "serial/jbmserial.groovy", file.getAbsolutePath(), "write", sender); + evaluate(receiverClassloader, "serial/jbmserial.groovy", file.getAbsolutePath(), "read", receiver); } } http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/9dbc5dc4/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/VersionedBaseTest.java ---------------------------------------------------------------------- diff --git a/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/VersionedBaseTest.java b/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/VersionedBaseTest.java index 62b98c6..8dc3302 100644 --- a/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/VersionedBaseTest.java +++ b/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/VersionedBaseTest.java @@ -28,7 +28,6 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; -import org.apache.activemq.artemis.utils.RunnableEx; import org.junit.AfterClass; import org.junit.Assume; import org.junit.ClassRule; @@ -81,11 +80,11 @@ public abstract class VersionedBaseTest { loaderMap.clear(); } - protected static void callScript(ClassLoader loader, String script, String... arguments) throws Exception { - tclCall(loader, () -> { + protected static Object evaluate(ClassLoader loader, String script, String... arguments) throws Exception { + return tclCall(loader, () -> { Class clazz = loader.loadClass(GroovyRun.class.getName()); - Method method = clazz.getMethod("doTest", String.class, String[].class); - method.invoke(null, script, arguments); + Method method = clazz.getMethod("evaluate", String.class, String[].class); + return method.invoke(null, script, arguments); }); } @@ -94,28 +93,41 @@ public abstract class VersionedBaseTest { Class clazz = loader.loadClass(GroovyRun.class.getName()); Method method = clazz.getMethod("setVariable", String.class, Object.class); method.invoke(null, name, object); + return null; }); } - protected static void callExecute(ClassLoader loader, String script) throws Exception { - tclCall(loader, () -> { + protected static Object setVariable(ClassLoader loader, String name) throws Exception { + return tclCall(loader, () -> { + Class clazz = loader.loadClass(GroovyRun.class.getName()); + Method method = clazz.getMethod("getVariable", String.class); + return method.invoke(null, name); + }); + } + + protected static Object execute(ClassLoader loader, String script) throws Exception { + return tclCall(loader, () -> { Class clazz = loader.loadClass(GroovyRun.class.getName()); Method method = clazz.getMethod("execute", String.class); - method.invoke(null, script); + return method.invoke(null, script); }); } - protected static void tclCall(ClassLoader loader, RunnableEx run) throws Exception { + protected static Object tclCall(ClassLoader loader, CallIt run) throws Exception { ClassLoader original = Thread.currentThread().getContextClassLoader(); Thread.currentThread().setContextClassLoader(loader); try { - run.run(); + return run.run(); } finally { Thread.currentThread().setContextClassLoader(original); } } + public interface CallIt { + Object run() throws Exception; + } + protected static ClassLoader defineClassLoader(String classPath) throws MalformedURLException { String[] classPathArray = classPath.split(File.pathSeparator); URL[] elements = new URL[classPathArray.length]; @@ -188,10 +200,10 @@ public abstract class VersionedBaseTest { scriptToUse = "servers/hornetqServer.groovy"; } - callScript(loader, scriptToUse, folder.getAbsolutePath(), serverName, server, sender, receiver); + evaluate(loader, scriptToUse, folder.getAbsolutePath(), serverName, server, sender, receiver); } public void stopServer(ClassLoader loader) throws Throwable { - callExecute(loader, "server.stop()"); + execute(loader, "server.stop()"); } }