This is an automated email from the ASF dual-hosted git repository. clebertsuconic pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git
The following commit(s) were added to refs/heads/master by this push: new 34fcac0 NO-JIRA Adding Compatibility tests on Large Message for HornetQ new 1b0b80a This closes #2608 34fcac0 is described below commit 34fcac0b50aea178c1e36728b25803bab223ce53 Author: Clebert Suconic <clebertsuco...@apache.org> AuthorDate: Wed Apr 3 17:01:27 2019 -0400 NO-JIRA Adding Compatibility tests on Large Message for HornetQ --- .../resources/meshTest/sendLargeMessages.groovy | 85 ++++++++++++++++++++ .../tests/compatibility/HQLargeMeshTest.java | 93 ++++++++++++++++++++++ 2 files changed, 178 insertions(+) diff --git a/tests/compatibility-tests/src/main/resources/meshTest/sendLargeMessages.groovy b/tests/compatibility-tests/src/main/resources/meshTest/sendLargeMessages.groovy new file mode 100644 index 0000000..9d704e7 --- /dev/null +++ b/tests/compatibility-tests/src/main/resources/meshTest/sendLargeMessages.groovy @@ -0,0 +1,85 @@ +package meshTest + +/* + * 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. + */ + +import org.hornetq.api.core.TransportConfiguration; +import org.hornetq.api.core.client.ClientConsumer; +import org.hornetq.api.core.client.ClientMessage; +import org.hornetq.api.core.client.ClientProducer; +import org.hornetq.api.core.client.ClientSession; +import org.hornetq.api.core.client.ClientSessionFactory; +import org.hornetq.api.core.client.HornetQClient; +import org.hornetq.api.core.client.ServerLocator; +import org.hornetq.core.remoting.impl.netty.NettyConnectorFactory; + +String operation = arg[2]; + +queueName = "jms.queue.queue" + +Map<String, Object> connectionParams = new HashMap<String, Object>(); +connectionParams.put(org.hornetq.core.remoting.impl.netty.TransportConstants.HOST_PROP_NAME, "127.0.0.1"); +connectionParams.put(org.hornetq.core.remoting.impl.netty.TransportConstants.PORT_PROP_NAME, 61616); + + +ServerLocator serverLocator = HornetQClient.createServerLocatorWithoutHA(new TransportConfiguration(NettyConnectorFactory.class.getName(), connectionParams)); +ClientSessionFactory sf = serverLocator.createSessionFactory(); + +ClientSession session = null; +session = sf.createSession(true, true); +session.start(); + +if (operation.equals("sendMessages")) { + ClientProducer producer = session.createProducer(queueName); + + ClientMessage bm = session.createMessage(false); + byte[] body = new byte[40000]; + new Random().nextBytes(body); + bm.getBodyBuffer().writeBytes(body); + + producer.send(bm); + ClientConsumer messageConsumer = session.createConsumer(queueName); + + ClientMessage messageReceived = null; + + messageReceived = messageConsumer.receive(); + ByteArrayOutputStream bao = new ByteArrayOutputStream(); + messageReceived.saveToOutputStream(bao); + + messageReceived.acknowledge(); + messageConsumer.close(); + + body = new byte[40000]; + new Random().nextBytes(body); + bm.getBodyBuffer().writeBytes(body); + producer.send(bm); +} else { + + ClientConsumer messageConsumer = session.createConsumer(queueName); + ClientMessage messageReceived = messageConsumer.receive(); + ByteArrayOutputStream bao = new ByteArrayOutputStream(); + messageReceived.saveToOutputStream(bao); + + messageReceived.acknowledge(); + +} + +session.close(); +sf.close(); +serverLocator.close(); + + diff --git a/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/HQLargeMeshTest.java b/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/HQLargeMeshTest.java new file mode 100644 index 0000000..0b65c50 --- /dev/null +++ b/tests/compatibility-tests/src/test/java/org/apache/activemq/artemis/tests/compatibility/HQLargeMeshTest.java @@ -0,0 +1,93 @@ +/* + * 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 org.apache.activemq.artemis.tests.compatibility.base.VersionedBase; +import org.apache.activemq.artemis.utils.FileUtil; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import static org.apache.activemq.artemis.tests.compatibility.GroovyRun.HORNETQ_235; +import static org.apache.activemq.artemis.tests.compatibility.GroovyRun.HORNETQ_247; +import static org.apache.activemq.artemis.tests.compatibility.GroovyRun.SNAPSHOT; + +/** + * To run this test on the IDE and debug it, run the compatibility-tests through a command line once: + * + * cd /compatibility-tests + * mvn install -Ptests | tee output.log + * + * on the output.log you will see the output generated by {@link #getClasspath(String)} + * + * On your IDE, edit the Run Configuration to your test and add those -D as parameters to your test. + * On Idea you would do the following: + * + * Run->Edit Configuration->Add ArtemisMeshTest and add your properties. + */ +@RunWith(Parameterized.class) +public class HQLargeMeshTest extends VersionedBase { + + // 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<Object[]> 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.add(new Object[]{SNAPSHOT, HORNETQ_247, HORNETQ_247}); + combinations.add(new Object[]{SNAPSHOT, HORNETQ_235, HORNETQ_247}); + combinations.add(new Object[]{SNAPSHOT, HORNETQ_247, HORNETQ_235}); + combinations.add(new Object[]{SNAPSHOT, HORNETQ_235, HORNETQ_235}); + return combinations; + } + + public HQLargeMeshTest(String server, String sender, String receiver) throws Exception { + super(server, sender, receiver); + } + + @Test + public void testSendReceive() throws Throwable { + + FileUtil.deleteDirectory(serverFolder.getRoot()); + setVariable(serverClassloader, "persistent", Boolean.TRUE); + startServer(serverFolder.getRoot(), serverClassloader, "live"); + + try { + boolean value = true; + evaluate(senderClassloader, "meshTest/sendLargeMessages.groovy", server, sender, "sendMessages"); + evaluate(receiverClassloader, "meshTest/sendLargeMessages.groovy", server, receiver, "receiveMessages"); + } finally { + stopServer(serverClassloader); + } + } + +} +