From b14622f7b6aa21168a03c8813271de7a31b568cd Mon Sep 17 00:00:00 2001 From: Martin Ritchie Date: Wed, 14 Feb 2007 14:55:21 +0000 Subject: QPID-368 Added the first data body to the list when creating it. included test case. Test case tests sending 9 messages - 64k-1 - 64k - 64k+1 - 128k-1 - 128k - 128+1 - 128k - 512k - 1024k git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@507557 13f79535-47bb-0310-9956-ffa450edef68 --- .../qpid/client/message/UnprocessedMessage.java | 1 + .../qpid/test/unit/basic/LargeMessageTest.java | 188 +++++++++++++++++++++ 2 files changed, 189 insertions(+) create mode 100644 java/client/src/test/java/org/apache/qpid/test/unit/basic/LargeMessageTest.java diff --git a/java/client/src/main/java/org/apache/qpid/client/message/UnprocessedMessage.java b/java/client/src/main/java/org/apache/qpid/client/message/UnprocessedMessage.java index 4f9c62df5c..c5353f1240 100644 --- a/java/client/src/main/java/org/apache/qpid/client/message/UnprocessedMessage.java +++ b/java/client/src/main/java/org/apache/qpid/client/message/UnprocessedMessage.java @@ -81,6 +81,7 @@ public class UnprocessedMessage else { _bodies = new ArrayList(); + _bodies.add(body); } } diff --git a/java/client/src/test/java/org/apache/qpid/test/unit/basic/LargeMessageTest.java b/java/client/src/test/java/org/apache/qpid/test/unit/basic/LargeMessageTest.java new file mode 100644 index 0000000000..e5a543b9ec --- /dev/null +++ b/java/client/src/test/java/org/apache/qpid/test/unit/basic/LargeMessageTest.java @@ -0,0 +1,188 @@ +/* + * 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.qpid.test.unit.basic; + +import junit.framework.TestCase; +import org.apache.log4j.Logger; +import org.apache.qpid.client.AMQConnection; +import org.apache.qpid.client.AMQSession; +import org.apache.qpid.client.AMQQueue; +import org.apache.qpid.client.transport.TransportConnection; +import org.apache.qpid.client.message.JMSTextMessage; + +import javax.jms.Destination; +import javax.jms.Session; +import javax.jms.MessageConsumer; +import javax.jms.JMSException; +import javax.jms.MessageProducer; +import javax.jms.TextMessage; +import java.util.List; +import java.util.ArrayList; + +public class LargeMessageTest extends TestCase +{ + private static final Logger _logger = Logger.getLogger(LargeMessageTest.class); + + private AMQConnection _connection; + private Destination _destination; + private AMQSession _session; + private final List received = new ArrayList(); + public String _broker = "vm://:1"; + + protected void setUp() throws Exception + { + super.setUp(); + TransportConnection.createVMBroker(1); + try + { + init(new AMQConnection(_broker, "guest", "guest", "LargeMessageTest", "test")); + } + catch (Exception e) + { + fail("Unable to initialilse connection: " + e); + } + } + + protected void tearDown() throws Exception + { + super.tearDown(); + } + + private void init(AMQConnection connection) throws Exception + { + Destination destination = new AMQQueue("LargeMessageTest", true); + init(connection, destination); + } + + private void init(AMQConnection connection, Destination destination) throws Exception + { + _connection = connection; + _destination = destination; + _session = (AMQSession) connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + + connection.start(); + } + + // Test boundary of 1 packet to 2 packets + public void test64kminus1() + { + checkLargeMessage(64 * 1024 - 1); + } + + public void test64k() + { + checkLargeMessage(64 * 1024); + } + + public void test64kplus1() + { + checkLargeMessage(64 * 1024 + 1); + } + + //Test packet boundary of 3 packtes + public void test128kminus1() + { + checkLargeMessage(128 * 1024 - 1); + } + + public void test128k() + { + checkLargeMessage(128 * 1024); + } + + public void test128kplus1() + { + checkLargeMessage(128 * 1024 + 1); + } + + // Testing larger messages + + public void test256k() + { + checkLargeMessage(256 * 1024); + } + + public void test512k() + { + checkLargeMessage(512 * 1024); + } + + public void test1024k() + { + checkLargeMessage(1024 * 1024); + } + + protected void checkLargeMessage(int messageSize) + { + try + { + MessageConsumer consumer = _session.createConsumer(_destination); + MessageProducer producer = _session.createProducer(_destination); + _logger.info("Testing message of size:" + messageSize); + + String _messageText = buildLargeMessage(messageSize); + + _logger.error("Message built"); + + producer.send(_session.createTextMessage(_messageText)); + + TextMessage result = (TextMessage) consumer.receive(1000); + + assertNotNull("Null message recevied", result); + assertEquals("Message Size", _messageText.length(), result.getText().length()); + assertEquals("Message content differes", _messageText, result.getText()); + } + catch (JMSException e) + { + e.printStackTrace(); + fail("Excpetion occured:" + e.getCause()); + } + } + + private String buildLargeMessage(int size) + { + StringBuilder builder = new StringBuilder(size); + + char ch = 'a'; + + for (int i = 1; i <= size; i++) + { + builder.append(ch); + + if (i % 1000 == 0) + { + ch++; + if (ch == 'z' + 1) + { + ch = 'a'; + } + } + } + + return builder.toString(); + } + + + public static junit.framework.Test suite() + { + return new junit.framework.TestSuite(LargeMessageTest.class); + } +} -- cgit v1.2.1