blob: 450963ae368df6f39f8f77d04a0f8acc2c6478c0 [file] [log] [blame]
/*
* 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.
*/
using System;
using Apache.NMS;
using Apache.NMS.AMQP.Message;
using Apache.NMS.AMQP.Message.Facade;
using Apache.NMS.AMQP.Provider.Amqp;
using Apache.NMS.AMQP.Provider.Amqp.Message;
using Apache.NMS.AMQP.Util;
using NUnit.Framework;
using Moq;
namespace NMS.AMQP.Test.Provider.Amqp
{
[TestFixture]
public class AmqpMessageFactoryTest
{
[Test]
public void TestCreateMessage()
{
AmqpMessageFactory factory = new AmqpMessageFactory(CreateMockAmqpConnection());
NmsMessage message = factory.CreateMessage();
INmsMessageFacade facade = message.Facade;
Assert.IsInstanceOf<NmsMessage>(message);
Assert.IsInstanceOf<AmqpNmsMessageFacade>(facade);
Assert.AreEqual(MessageSupport.JMS_TYPE_MSG, facade.JmsMsgType);
}
[Test]
public void TestCreateTextMessage()
{
AmqpMessageFactory factory = new AmqpMessageFactory(CreateMockAmqpConnection());
NmsTextMessage message = factory.CreateTextMessage();
INmsMessageFacade facade = message.Facade;
Assert.IsInstanceOf<NmsTextMessage>(message);
Assert.IsInstanceOf<AmqpNmsTextMessageFacade>(facade);
Assert.AreEqual(MessageSupport.JMS_TYPE_TXT, facade.JmsMsgType);
Assert.Null(((AmqpNmsTextMessageFacade) facade).Text);
}
[Test]
public void TestCreateTextMessageString()
{
AmqpMessageFactory factory = new AmqpMessageFactory(CreateMockAmqpConnection());
NmsTextMessage message = factory.CreateTextMessage("SomeValue");
INmsMessageFacade facade = message.Facade;
Assert.IsInstanceOf<NmsTextMessage>(message);
Assert.IsInstanceOf<AmqpNmsTextMessageFacade>(facade);
Assert.AreEqual(MessageSupport.JMS_TYPE_TXT, facade.JmsMsgType);
Assert.AreEqual("SomeValue", ((AmqpNmsTextMessageFacade) facade).Text);
}
[Test]
public void TestCreateBytesMessage()
{
AmqpMessageFactory factory = new AmqpMessageFactory(CreateMockAmqpConnection());
NmsBytesMessage message = factory.CreateBytesMessage();
INmsMessageFacade facade = message.Facade;
Assert.IsInstanceOf<NmsBytesMessage>(message);
Assert.IsInstanceOf<AmqpNmsBytesMessageFacade>(facade);
Assert.AreEqual(MessageSupport.JMS_TYPE_BYTE, facade.JmsMsgType);
Assert.AreEqual(0, ((AmqpNmsBytesMessageFacade) facade).BodyLength);
}
[Test]
public void TestCreateMapMessage()
{
AmqpMessageFactory factory = new AmqpMessageFactory(CreateMockAmqpConnection());
NmsMapMessage message = factory.CreateMapMessage();
INmsMessageFacade facade = message.Facade;
Assert.IsInstanceOf<NmsMapMessage>(message);
Assert.IsInstanceOf<AmqpNmsMapMessageFacade>(facade);
Assert.AreEqual(MessageSupport.JMS_TYPE_MAP, facade.JmsMsgType);
Assert.AreEqual(0, ((AmqpNmsMapMessageFacade) facade).Map.Keys.Count);
}
[Test]
public void TestCreateStreamMessage()
{
AmqpMessageFactory factory = new AmqpMessageFactory(CreateMockAmqpConnection());
NmsStreamMessage message = factory.CreateStreamMessage();
INmsMessageFacade facade = message.Facade;
Assert.IsInstanceOf<NmsStreamMessage>(message);
Assert.IsInstanceOf<AmqpNmsStreamMessageFacade>(facade);
Assert.AreEqual(MessageSupport.JMS_TYPE_STRM, facade.JmsMsgType);
Assert.False(((AmqpNmsStreamMessageFacade) facade).HasBody());
}
[Test]
public void TestCreateObjectMessage()
{
AmqpMessageFactory factory = new AmqpMessageFactory(CreateMockAmqpConnection());
NmsObjectMessage message = factory.CreateObjectMessage();
INmsMessageFacade facade = message.Facade;
Assert.IsInstanceOf<NmsObjectMessage>(message);
Assert.IsInstanceOf<AmqpNmsObjectMessageFacade>(facade);
Assert.AreEqual(MessageSupport.JMS_TYPE_OBJ, facade.JmsMsgType);
Assert.IsNull(((AmqpNmsObjectMessageFacade) facade).Body);
}
[Test]
public void TestCreateObjectMessageSerializable()
{
AmqpMessageFactory factory = new AmqpMessageFactory(CreateMockAmqpConnection());
NmsObjectMessage message = factory.CreateObjectMessage(new SerializableClass());
INmsMessageFacade facade = message.Facade;
Assert.IsInstanceOf<NmsObjectMessage>(message);
Assert.IsInstanceOf<AmqpNmsObjectMessageFacade>(facade);
Assert.AreEqual(MessageSupport.JMS_TYPE_OBJ, facade.JmsMsgType);
AmqpNmsObjectMessageFacade objectMessageFacade = (AmqpNmsObjectMessageFacade) facade;
Assert.IsNotNull(objectMessageFacade.Body);
Assert.IsInstanceOf<SerializableClass>(objectMessageFacade.Body);
}
[Test]
public void TestCreateObjectMessageWithBadTypeThrowsNMSException()
{
AmqpMessageFactory factory = new AmqpMessageFactory(CreateMockAmqpConnection());
Assert.Catch<MessageFormatException>(() => factory.CreateObjectMessage(new NotSerializable()));
}
private IAmqpConnection CreateMockAmqpConnection(bool amqpTyped = false)
{
Mock<IAmqpConnection> mockConnection = new Mock<IAmqpConnection>();
mockConnection.Setup(connection => connection.QueuePrefix).Returns("");
mockConnection.Setup(connection => connection.TopicPrefix).Returns("");
mockConnection.Setup(connection => connection.ObjectMessageUsesAmqpTypes).Returns(amqpTyped);
return mockConnection.Object;
}
[Serializable]
private class SerializableClass
{
}
private class NotSerializable
{
}
}
}