From ff95b216ef2a26d8487d3119e7e5f575df5210c8 Mon Sep 17 00:00:00 2001 From: jbertram Date: Tue, 26 Jan 2016 12:51:45 -0600 Subject: [PATCH 1/3] ARTEMIS-357 test for client buffer mod --- .../integration/client/MessageBufferTest.java | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/MessageBufferTest.java diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/MessageBufferTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/MessageBufferTest.java new file mode 100644 index 00000000000..2b6b26ec91a --- /dev/null +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/MessageBufferTest.java @@ -0,0 +1,83 @@ +/* + * 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.client; + +import java.util.UUID; + +import org.apache.activemq.artemis.api.core.client.ClientConsumer; +import org.apache.activemq.artemis.api.core.client.ClientProducer; +import org.apache.activemq.artemis.api.core.client.ClientSession; +import org.apache.activemq.artemis.api.core.client.ClientSessionFactory; +import org.apache.activemq.artemis.api.core.client.ServerLocator; +import org.apache.activemq.artemis.core.client.impl.ClientMessageImpl; +import org.apache.activemq.artemis.core.server.ActiveMQServer; +import org.apache.activemq.artemis.tests.util.ActiveMQTestBase; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +public class MessageBufferTest extends ActiveMQTestBase { + + protected ActiveMQServer server; + protected ClientSession session; + protected ClientSessionFactory sf; + protected ServerLocator locator; + + @Override + @Before + public void setUp() throws Exception { + super.setUp(); + server = createServer(false, createDefaultInVMConfig()); + server.start(); + locator = createInVMNonHALocator(); + sf = createSessionFactory(locator); + session = addClientSession(sf.createSession(false, true, true)); + } + + @Test + public void simpleTest() throws Exception { + final String data = "Simple Text " + UUID.randomUUID().toString(); + final String queueName = "simpleQueue"; + final String addressName = "simpleAddress"; + + session.createQueue(addressName, queueName); + ClientProducer producer = session.createProducer(addressName); + + ClientMessageImpl message = (ClientMessageImpl)session.createMessage(true); + message.getBodyBuffer().writeString(data); + + for (int i = 0; i < 100; i++) { + message.putStringProperty("key", "int" + i); + // JMS layer will always call this before sending + message.getBodyBuffer().resetReaderIndex(); + producer.send(message); + session.commit(); + Assert.assertTrue("Message body growing indefinitely and unexpectedly", message.getBodySize() < 1000); + + } + + producer.send(message); + producer.close(); + ClientConsumer consumer = session.createConsumer(queueName); + session.start(); + + assertNotNull(message); + message.acknowledge(); + assertEquals(data, message.getBodyBuffer().readString()); + } +} From 4d239ac80355a9eabec99683b11e1c6c308e39c8 Mon Sep 17 00:00:00 2001 From: Clebert Suconic Date: Tue, 26 Jan 2016 22:30:24 -0500 Subject: [PATCH 2/3] ARTEMIS-357 fixing issue with Messages Growing after JMS sends (after my last change on ARTEMIS-357) --- .../core/buffers/impl/ResetLimitWrappedActiveMQBuffer.java | 4 ++-- .../activemq/artemis/core/client/impl/ClientMessageImpl.java | 2 +- .../activemq/artemis/core/message/impl/MessageImpl.java | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/buffers/impl/ResetLimitWrappedActiveMQBuffer.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/buffers/impl/ResetLimitWrappedActiveMQBuffer.java index b3cdfe193ba..61ecef613b1 100644 --- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/buffers/impl/ResetLimitWrappedActiveMQBuffer.java +++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/buffers/impl/ResetLimitWrappedActiveMQBuffer.java @@ -45,7 +45,7 @@ public void setMessage(MessageInternal message) { public ResetLimitWrappedActiveMQBuffer(final int limit, final ActiveMQBuffer buffer, final MessageInternal message) { // a wrapped inside a wrapper will increase the stack size. // we fixed this here due to some profiling testing - super(unwrap(buffer.byteBuf())); + super(unwrap(buffer.byteBuf()).duplicate()); this.limit = limit; @@ -53,7 +53,7 @@ public ResetLimitWrappedActiveMQBuffer(final int limit, final ActiveMQBuffer buf writerIndex(limit); } - buffer.readerIndex(limit); + readerIndex(limit); this.message = message; } diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientMessageImpl.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientMessageImpl.java index 7668251842c..31d9aad3893 100644 --- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientMessageImpl.java +++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientMessageImpl.java @@ -136,7 +136,7 @@ public boolean isCompressed() { @Override public int getBodySize() { - return buffer.writerIndex() - buffer.readerIndex(); + return getBodyBuffer().writerIndex() - getBodyBuffer().readerIndex(); } @Override diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/message/impl/MessageImpl.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/message/impl/MessageImpl.java index e7c33ffd7d8..ca526211b8f 100644 --- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/message/impl/MessageImpl.java +++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/message/impl/MessageImpl.java @@ -448,7 +448,7 @@ public int getEndOfMessagePosition() { @Override public int getEndOfBodyPosition() { if (endOfBodyPosition < 0) { - endOfBodyPosition = buffer.writerIndex(); + endOfBodyPosition = getBodyBuffer().writerIndex(); } return endOfBodyPosition; } From 4a20187ff293becda03152c6ce071593762c3dc5 Mon Sep 17 00:00:00 2001 From: Clebert Suconic Date: Wed, 27 Jan 2016 14:23:30 -0500 Subject: [PATCH 3/3] Fixing name on JDBC tests --- .../artemis/tests/integration/xa/BasicXaRecoveryTest.java | 2 +- .../activemq/artemis/tests/integration/xa/BasicXaTest.java | 2 +- .../activemq/artemis/tests/integration/xa/XaTimeoutTest.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/xa/BasicXaRecoveryTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/xa/BasicXaRecoveryTest.java index d69a0dcf765..ddd2f2687ee 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/xa/BasicXaRecoveryTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/xa/BasicXaRecoveryTest.java @@ -82,7 +82,7 @@ public BasicXaRecoveryTest(StoreConfiguration.StoreType storeType) { this.storeType = storeType; } - @Parameterized.Parameters(name = "storeType") + @Parameterized.Parameters(name = "storeType={0}") public static Collection data() { Object[][] params = new Object[][] {{StoreConfiguration.StoreType.FILE}, {StoreConfiguration.StoreType.DATABASE}}; return Arrays.asList(params); diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/xa/BasicXaTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/xa/BasicXaTest.java index 9b6abac4858..f7f5d65e79c 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/xa/BasicXaTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/xa/BasicXaTest.java @@ -75,7 +75,7 @@ public BasicXaTest(StoreConfiguration.StoreType storeType) { this.storeType = storeType; } - @Parameterized.Parameters(name = "storeType") + @Parameterized.Parameters(name = "storeType={0}") public static Collection data() { Object[][] params = new Object[][] {{StoreConfiguration.StoreType.FILE}, {StoreConfiguration.StoreType.DATABASE}}; return Arrays.asList(params); diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/xa/XaTimeoutTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/xa/XaTimeoutTest.java index 3e0ea1527cf..e3149e32982 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/xa/XaTimeoutTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/xa/XaTimeoutTest.java @@ -85,7 +85,7 @@ public XaTimeoutTest(StoreConfiguration.StoreType storeType) { this.storeType = storeType; } - @Parameterized.Parameters(name = "storeType") + @Parameterized.Parameters(name = "storeType={0}") public static Collection data() { Object[][] params = new Object[][] {{StoreConfiguration.StoreType.FILE}, {StoreConfiguration.StoreType.DATABASE}}; return Arrays.asList(params);