This is an automated email from the ASF dual-hosted git repository. clebertsuconic pushed a commit to branch 2.19.x in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git
commit fd2c76db65c538602958cb3cba6dc9a7610e6f48 Author: Justin Bertram <[email protected]> AuthorDate: Fri Oct 29 11:01:05 2021 -0500 ARTEMIS-3535 bytes messages not obeying management limit (cherry picked from commit fb2270dc057c773f99e679132fd8ce926ff2fc58) --- .../artemis/core/message/impl/CoreMessage.java | 8 ++++- .../integration/management/QueueControlTest.java | 42 ++++++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/message/impl/CoreMessage.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/message/impl/CoreMessage.java index 5463109..aa3fe34 100644 --- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/message/impl/CoreMessage.java +++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/message/impl/CoreMessage.java @@ -1372,7 +1372,13 @@ public class CoreMessage extends RefCountMessage implements ICoreMessage { rc.put(CompositeDataConstants.TYPE, m.getType()); if (!m.isLargeMessage()) { ActiveMQBuffer bodyCopy = m.getReadOnlyBodyBuffer(); - byte[] bytes = new byte[bodyCopy.readableBytes() <= valueSizeLimit ? bodyCopy.readableBytes() : valueSizeLimit + 1]; + int arraySize; + if (valueSizeLimit == -1 || bodyCopy.readableBytes() <= valueSizeLimit) { + arraySize = bodyCopy.readableBytes(); + } else { + arraySize = valueSizeLimit; + } + byte[] bytes = new byte[arraySize]; bodyCopy.readBytes(bytes); rc.put(CompositeDataConstants.BODY, JsonUtil.truncate(bytes, valueSizeLimit)); } else { diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/QueueControlTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/QueueControlTest.java index 4b2a58f..fa905ff 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/QueueControlTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/QueueControlTest.java @@ -578,6 +578,48 @@ public class QueueControlTest extends ManagementTestBase { } @Test + public void testBytesMessageBodyWithoutLimits() throws Exception { + final int BYTE_COUNT = 2048; + SimpleString address = RandomUtil.randomSimpleString(); + SimpleString queue = RandomUtil.randomSimpleString(); + + AddressSettings addressSettings = new AddressSettings().setManagementMessageAttributeSizeLimit(-1); + server.getAddressSettingsRepository().addMatch(address.toString(), addressSettings); + + session.createQueue(new QueueConfiguration(queue).setAddress(address).setDurable(durable)); + + byte[] randomBytes = RandomUtil.randomBytes(BYTE_COUNT); + + ClientMessage clientMessage = session.createMessage(false); + clientMessage.getBodyBuffer().writeBytes(randomBytes); + + QueueControl queueControl = createManagementControl(address, queue); + Assert.assertEquals(0, getMessageCount(queueControl)); + + ClientProducer producer = session.createProducer(address); + producer.send(clientMessage); + + Wait.assertEquals(1, () -> getMessageCount(queueControl)); + + CompositeData[] browseResult = queueControl.browse(1, 1); + boolean tested = false; + for (CompositeData compositeData : browseResult) { + for (String key : compositeData.getCompositeType().keySet()) { + Object value = compositeData.get(key); + if (value != null) { + if (value instanceof byte[]) { + assertEqualsByteArrays(randomBytes, (byte[]) value); + tested = true; + } + } + } + } + + assertTrue("Nothing tested!", tested); + session.deleteQueue(queue); + } + + @Test public void testTextMessageAttributeLimits() throws Exception { SimpleString address = RandomUtil.randomSimpleString(); SimpleString queue = RandomUtil.randomSimpleString();
