Return-Path: X-Original-To: apmail-qpid-commits-archive@www.apache.org Delivered-To: apmail-qpid-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id C922917B9F for ; Fri, 3 Oct 2014 12:45:20 +0000 (UTC) Received: (qmail 83508 invoked by uid 500); 3 Oct 2014 12:45:20 -0000 Delivered-To: apmail-qpid-commits-archive@qpid.apache.org Received: (qmail 83419 invoked by uid 500); 3 Oct 2014 12:45:20 -0000 Mailing-List: contact commits-help@qpid.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@qpid.apache.org Delivered-To: mailing list commits@qpid.apache.org Received: (qmail 83335 invoked by uid 99); 3 Oct 2014 12:45:20 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 03 Oct 2014 12:45:20 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 6AA23A1F162; Fri, 3 Oct 2014 12:45:20 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: robbie@apache.org To: commits@qpid.apache.org Date: Fri, 03 Oct 2014 12:45:24 -0000 Message-Id: <3e4127025a174c7085f649053d5af5e9@git.apache.org> In-Reply-To: <03c10d284acc4524b5256835e8559bd7@git.apache.org> References: <03c10d284acc4524b5256835e8559bd7@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [5/8] git commit: add basic ObjectMessage integration tests add basic ObjectMessage integration tests Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/19d2d052 Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/19d2d052 Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/19d2d052 Branch: refs/heads/master Commit: 19d2d0522ff2fe54075880ece7d4d252e596fc01 Parents: e44c2e7 Author: Robert Gemmell Authored: Fri Oct 3 11:09:19 2014 +0100 Committer: Robert Gemmell Committed: Fri Oct 3 11:09:19 2014 +0100 ---------------------------------------------------------------------- .../ObjectMessageIntegrationTest.java | 297 +++++++++++++++++++ 1 file changed, 297 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/19d2d052/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ObjectMessageIntegrationTest.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ObjectMessageIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ObjectMessageIntegrationTest.java new file mode 100644 index 0000000..e08678e --- /dev/null +++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ObjectMessageIntegrationTest.java @@ -0,0 +1,297 @@ +/* + * 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.jms.integration; + +import static org.hamcrest.Matchers.equalTo; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.io.ByteArrayOutputStream; +import java.io.ObjectOutputStream; +import java.util.HashMap; + +import javax.jms.Connection; +import javax.jms.Message; +import javax.jms.MessageConsumer; +import javax.jms.MessageProducer; +import javax.jms.ObjectMessage; +import javax.jms.Queue; +import javax.jms.Session; + +import org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport; +import org.apache.qpid.jms.test.QpidJmsTestCase; +import org.apache.qpid.jms.test.testpeer.TestAmqpPeer; +import org.apache.qpid.jms.test.testpeer.describedtypes.sections.AmqpValueDescribedType; +import org.apache.qpid.jms.test.testpeer.describedtypes.sections.DataDescribedType; +import org.apache.qpid.jms.test.testpeer.describedtypes.sections.MessageAnnotationsDescribedType; +import org.apache.qpid.jms.test.testpeer.describedtypes.sections.PropertiesDescribedType; +import org.apache.qpid.jms.test.testpeer.matchers.sections.MessageAnnotationsSectionMatcher; +import org.apache.qpid.jms.test.testpeer.matchers.sections.MessageHeaderSectionMatcher; +import org.apache.qpid.jms.test.testpeer.matchers.sections.MessagePropertiesSectionMatcher; +import org.apache.qpid.jms.test.testpeer.matchers.sections.TransferPayloadCompositeMatcher; +import org.apache.qpid.jms.test.testpeer.matchers.types.EncodedAmqpValueMatcher; +import org.apache.qpid.jms.test.testpeer.matchers.types.EncodedDataMatcher; +import org.apache.qpid.proton.amqp.Binary; +import org.apache.qpid.proton.amqp.DescribedType; +import org.apache.qpid.proton.amqp.Symbol; +import org.junit.Ignore; +import org.junit.Test; + +public class ObjectMessageIntegrationTest extends QpidJmsTestCase +{ + private final IntegrationTestFixture _testFixture = new IntegrationTestFixture(); + + //==== Java serialization encoding ==== + + @Test(timeout = 5000) + public void testSendBasicObjectMessageWithSerializedContent() throws Exception + { + try(TestAmqpPeer testPeer = new TestAmqpPeer(IntegrationTestFixture.PORT);) + { + Connection connection = _testFixture.establishConnecton(testPeer); + testPeer.expectBegin(true); + testPeer.expectSenderAttach(); + + Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + Queue queue = session.createQueue("myQueue"); + MessageProducer producer = session.createProducer(queue); + + String content = "myObjectString"; + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ObjectOutputStream oos = new ObjectOutputStream(baos); + oos.writeObject(content); + oos.flush(); + oos.close(); + byte[] bytes = baos.toByteArray(); + + MessageHeaderSectionMatcher headersMatcher = new MessageHeaderSectionMatcher(true).withDurable(equalTo(true)); + MessageAnnotationsSectionMatcher msgAnnotationsMatcher = new MessageAnnotationsSectionMatcher(true); + msgAnnotationsMatcher.withEntry(Symbol.valueOf(AmqpMessageSupport.JMS_MSG_TYPE), equalTo(AmqpMessageSupport.JMS_OBJECT_MESSAGE)); + MessagePropertiesSectionMatcher propertiesMatcher = new MessagePropertiesSectionMatcher(true); + propertiesMatcher.withContentType(equalTo(Symbol.valueOf(AmqpMessageSupport.SERIALIZED_JAVA_OBJECT_CONTENT_TYPE))); + TransferPayloadCompositeMatcher messageMatcher = new TransferPayloadCompositeMatcher(); + messageMatcher.setHeadersMatcher(headersMatcher); + messageMatcher.setMessageAnnotationsMatcher(msgAnnotationsMatcher); + messageMatcher.setPropertiesMatcher(propertiesMatcher); + messageMatcher.setMessageContentMatcher(new EncodedDataMatcher(new Binary(bytes))); + + testPeer.expectTransfer(messageMatcher); + + ObjectMessage message = session.createObjectMessage(); + message.setObject(content); + + producer.send(message); + + testPeer.waitForAllHandlersToComplete(3000); + } + } + + @Test(timeout = 5000) + public void testReceiveBasicObjectMessageWithSerializedContent() throws Exception + { + try(TestAmqpPeer testPeer = new TestAmqpPeer(IntegrationTestFixture.PORT);) + { + Connection connection = _testFixture.establishConnecton(testPeer); + connection.start(); + + testPeer.expectBegin(true); + + Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + Queue queue = session.createQueue("myQueue"); + + PropertiesDescribedType properties = new PropertiesDescribedType(); + properties.setContentType(Symbol.valueOf(AmqpMessageSupport.SERIALIZED_JAVA_OBJECT_CONTENT_TYPE)); + + String expectedContent = "expectedContent"; + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ObjectOutputStream oos = new ObjectOutputStream(baos); + oos.writeObject(expectedContent); + oos.flush(); + oos.close(); + byte[] bytes = baos.toByteArray(); + + MessageAnnotationsDescribedType msgAnnotations = new MessageAnnotationsDescribedType(); + msgAnnotations.setSymbolKeyedAnnotation(AmqpMessageSupport.JMS_MSG_TYPE, AmqpMessageSupport.JMS_OBJECT_MESSAGE); + + DescribedType dataContent = new DataDescribedType(new Binary(bytes)); + + testPeer.expectReceiverAttach(); + testPeer.expectLinkFlowRespondWithTransfer(null, msgAnnotations, properties, null, dataContent); + testPeer.expectDispositionThatIsAcceptedAndSettled(); + + MessageConsumer messageConsumer = session.createConsumer(queue); + Message receivedMessage = messageConsumer.receive(1000); + testPeer.waitForAllHandlersToComplete(3000); + + assertNotNull(receivedMessage); + assertTrue(receivedMessage instanceof ObjectMessage); + ObjectMessage objectMessage = (ObjectMessage)receivedMessage; + + Object object = objectMessage.getObject(); + assertNotNull("Expected object but got null", object); + assertEquals("Message body object was not as expected", expectedContent, object); + } + } + + @Test(timeout = 5000) + public void testReceiveAndThenResendBasicObjectMessageWithSerializedContent() throws Exception + { + try(TestAmqpPeer testPeer = new TestAmqpPeer(IntegrationTestFixture.PORT);) + { + Connection connection = _testFixture.establishConnecton(testPeer); + connection.start(); + + testPeer.expectBegin(true); + + Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + Queue queue = session.createQueue("myQueue"); + + MessageAnnotationsDescribedType msgAnnotations = new MessageAnnotationsDescribedType(); + msgAnnotations.setSymbolKeyedAnnotation(AmqpMessageSupport.JMS_MSG_TYPE, AmqpMessageSupport.JMS_OBJECT_MESSAGE); + PropertiesDescribedType properties = new PropertiesDescribedType(); + properties.setContentType(Symbol.valueOf(AmqpMessageSupport.SERIALIZED_JAVA_OBJECT_CONTENT_TYPE)); + + String expectedContent = "expectedContent"; + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ObjectOutputStream oos = new ObjectOutputStream(baos); + oos.writeObject(expectedContent); + oos.flush(); + oos.close(); + byte[] bytes = baos.toByteArray(); + + DescribedType dataContent = new DataDescribedType(new Binary(bytes)); + + testPeer.expectReceiverAttach(); + testPeer.expectLinkFlowRespondWithTransfer(null, msgAnnotations, properties, null, dataContent); + testPeer.expectDispositionThatIsAcceptedAndSettled(); + + MessageConsumer messageConsumer = session.createConsumer(queue); + Message receivedMessage = messageConsumer.receive(1000); + testPeer.waitForAllHandlersToComplete(3000); + + assertNotNull(receivedMessage); + assertTrue(receivedMessage instanceof ObjectMessage); + + testPeer.expectSenderAttach(); + MessageProducer producer = session.createProducer(queue); + + MessageHeaderSectionMatcher headersMatcher = new MessageHeaderSectionMatcher(true).withDurable(equalTo(true)); + MessageAnnotationsSectionMatcher msgAnnotationsMatcher = new MessageAnnotationsSectionMatcher(true); + msgAnnotationsMatcher.withEntry(Symbol.valueOf(AmqpMessageSupport.JMS_MSG_TYPE), equalTo(AmqpMessageSupport.JMS_OBJECT_MESSAGE)); + MessagePropertiesSectionMatcher propertiesMatcher = new MessagePropertiesSectionMatcher(true); + propertiesMatcher.withContentType(equalTo(Symbol.valueOf(AmqpMessageSupport.SERIALIZED_JAVA_OBJECT_CONTENT_TYPE))); + TransferPayloadCompositeMatcher messageMatcher = new TransferPayloadCompositeMatcher(); + messageMatcher.setHeadersMatcher(headersMatcher); + messageMatcher.setMessageAnnotationsMatcher(msgAnnotationsMatcher); + messageMatcher.setPropertiesMatcher(propertiesMatcher); + messageMatcher.setMessageContentMatcher(new EncodedDataMatcher(new Binary(bytes))); + + testPeer.expectTransfer(messageMatcher); + + producer.send(receivedMessage); + + testPeer.waitForAllHandlersToComplete(3000); + } + } + + //==== AMQP type system encoding ==== + + @Test(timeout = 5000) + @Ignore //TODO: currently failing due to sending the wrong type of section (seemingly still serializing) + public void testSendBasicObjectMessageWithAmqpTypedContent() throws Exception + { + try(TestAmqpPeer testPeer = new TestAmqpPeer(IntegrationTestFixture.PORT);) + { + Connection connection = _testFixture.establishConnecton(testPeer); + testPeer.expectBegin(true); + testPeer.expectSenderAttach(); + + Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + Queue queue = session.createQueue("myQueue"); + MessageProducer producer = session.createProducer(queue); + + HashMap map = new HashMap(); + map.put("key", "myObjectString"); + + MessageHeaderSectionMatcher headersMatcher = new MessageHeaderSectionMatcher(true).withDurable(equalTo(true)); + MessageAnnotationsSectionMatcher msgAnnotationsMatcher = new MessageAnnotationsSectionMatcher(true); + msgAnnotationsMatcher.withEntry(Symbol.valueOf(AmqpMessageSupport.JMS_MSG_TYPE), equalTo(AmqpMessageSupport.JMS_OBJECT_MESSAGE)); + MessagePropertiesSectionMatcher propertiesMatcher = new MessagePropertiesSectionMatcher(true); + TransferPayloadCompositeMatcher messageMatcher = new TransferPayloadCompositeMatcher(); + messageMatcher.setHeadersMatcher(headersMatcher); + messageMatcher.setMessageAnnotationsMatcher(msgAnnotationsMatcher); + messageMatcher.setPropertiesMatcher(propertiesMatcher); + messageMatcher.setMessageContentMatcher(new EncodedAmqpValueMatcher(map)); + + testPeer.expectTransfer(messageMatcher); + + ObjectMessage message = session.createObjectMessage(); + message.setBooleanProperty(AmqpMessageSupport.JMS_AMQP_TYPED_ENCODING, true); + message.setObject(map); + + producer.send(message); + + testPeer.waitForAllHandlersToComplete(3000); + } + } + + @Test(timeout = 5000) + @Ignore //TODO: currently failing due to being unable to receive the AmqpValue body section type + public void testRecieveBasicObjectMessageWithAmqpTypedContentAndJMSMessageTypeAnnotation() throws Exception + { + try(TestAmqpPeer testPeer = new TestAmqpPeer(IntegrationTestFixture.PORT);) + { + Connection connection = _testFixture.establishConnecton(testPeer); + connection.start(); + + testPeer.expectBegin(true); + + Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + Queue queue = session.createQueue("myQueue"); + + MessageAnnotationsDescribedType msgAnnotations = new MessageAnnotationsDescribedType(); + msgAnnotations.setSymbolKeyedAnnotation(AmqpMessageSupport.JMS_MSG_TYPE, AmqpMessageSupport.JMS_OBJECT_MESSAGE); + + HashMap map = new HashMap(); + map.put("key", "myObjectString"); + + DescribedType amqpValueContent = new AmqpValueDescribedType(map); + + testPeer.expectReceiverAttach(); + testPeer.expectLinkFlowRespondWithTransfer(null, msgAnnotations, null, null, amqpValueContent); + testPeer.expectDispositionThatIsAcceptedAndSettled(); + + MessageConsumer messageConsumer = session.createConsumer(queue); + Message receivedMessage = messageConsumer.receive(1000); + testPeer.waitForAllHandlersToComplete(3000); + + assertNotNull(receivedMessage); + assertTrue("Expected ObjectMessage instance, but got: " + receivedMessage.getClass().getName(), receivedMessage instanceof ObjectMessage); + ObjectMessage objectMessage = (ObjectMessage)receivedMessage; + + Object object = objectMessage.getObject(); + assertNotNull("Expected object but got null", object); + assertEquals("Message body object was not as expected", map, object); + } + } +} --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org For additional commands, e-mail: commits-help@qpid.apache.org