From b54eae65db8b6c1e59b04dff606f734bc2eaa9ab Mon Sep 17 00:00:00 2001 From: "Charles E. Rolke" Date: Thu, 18 Nov 2010 21:41:34 +0000 Subject: QPID-2953 Qpid Cpp Messaging .NET Binding does not include unit tests. This checkin converts project test\messaging.test from an EXE to a DLL usable by NUnit. Tests for several managed objects are included in new files. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1036644 13f79535-47bb-0310-9956-ffa450edef68 --- .../test/messaging.test/messaging.test.address.cs | 157 +++++++++++ .../messaging.test/messaging.test.connection.cs | 100 +++++++ .../dotnet/test/messaging.test/messaging.test.cs | 241 ++++------------- .../test/messaging.test/messaging.test.csproj | 59 ++++- .../test/messaging.test/messaging.test.duration.cs | 99 +++++++ .../test/messaging.test/messaging.test.message.cs | 294 +++++++++++++++++++++ 6 files changed, 742 insertions(+), 208 deletions(-) create mode 100644 cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.address.cs create mode 100644 cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.connection.cs create mode 100644 cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.duration.cs create mode 100644 cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.message.cs (limited to 'cpp') diff --git a/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.address.cs b/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.address.cs new file mode 100644 index 0000000000..22ad186c9a --- /dev/null +++ b/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.address.cs @@ -0,0 +1,157 @@ +/* + * + * 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. + * + */ + +namespace Org.Apache.Qpid.Messaging.UnitTest +{ + using System; + using System.Collections.Generic; + using System.Collections.ObjectModel; + using Org.Apache.Qpid.Messaging; + using NUnit.Framework; + + [TestFixture] + public class AddressTests + { + [SetUp] + public void SetUp() + { + } + + [TearDown] + public void TearDown() + { + } + + // + // Address test + // + [Test] + public void AddressConstructor_Empty() + { + Address addr = new Address(); + + StringAssert.IsMatch("", addr.ToStr()); + + StringAssert.IsMatch("", addr.Name); + StringAssert.IsMatch("", addr.Subject); + Dictionary opts = addr.Options; + Assert.AreEqual(0, opts.Count); + StringAssert.IsMatch("", addr.Type); + } + + + [Test] + public void AddressConstructor_Name() + { + Address addr = new Address("name1"); + + StringAssert.IsMatch("", addr.ToStr()); + + StringAssert.IsMatch("name1", addr.Name); + StringAssert.IsMatch("", addr.Subject); + Dictionary opts = addr.Options; + Assert.AreEqual(0, opts.Count); + StringAssert.IsMatch("", addr.Type); + } + + + [Test] + public void AddressConstructor_NameSubjOpts() + { + Dictionary options = new Dictionary(); + options["one"] = 1; + options["two"] = "two"; + + Address addr = new Address("name2", "subj2", options); + + StringAssert.IsMatch("name2/subj2;{node:{type:}, one:1, two:two}", addr.ToStr()); + + StringAssert.IsMatch("name2", addr.Name); + StringAssert.IsMatch("subj2", addr.Subject); + Dictionary opts = addr.Options; + Assert.AreEqual(3, opts.Count); + StringAssert.IsMatch("", addr.Type); + } + + [Test] + public void AddressConstructor_NameSubjOptsType() + { + Dictionary options = new Dictionary(); + options["one"] = 1; + options["two"] = "two"; + + Address addr = new Address("name3", "subj3", options, "type3"); + + StringAssert.IsMatch("name3/subj3;{node:{type:type3}, one:1, two:two}", addr.ToStr()); + + StringAssert.IsMatch("name3", addr.Name); + StringAssert.IsMatch("subj3", addr.Subject); + Dictionary opts = addr.Options; + Assert.AreEqual(3, opts.Count); + StringAssert.IsMatch("type3", addr.Type); + } + + [Test] + public void AddressProperty() + { + Dictionary options = new Dictionary(); + options["one"] = 1; + options["two"] = "two"; + options["pi"] = 3.14159; + Dictionary opts; + + Address addr = new Address(); + + addr.Name = "name4"; + + StringAssert.IsMatch("name4", addr.Name); + StringAssert.IsMatch("", addr.Subject); + opts = addr.Options; + Assert.AreEqual(0, opts.Count); + StringAssert.IsMatch("", addr.Type); + + addr.Subject = "subject4"; + + StringAssert.IsMatch("name4", addr.Name); + StringAssert.IsMatch("subject4", addr.Subject); + opts = addr.Options; + Assert.AreEqual(0, opts.Count); + StringAssert.IsMatch("", addr.Type); + + addr.Type = "type4"; + + StringAssert.IsMatch("name4", addr.Name); + StringAssert.IsMatch("subject4", addr.Subject); + opts = addr.Options; + Assert.AreEqual(1, opts.Count); + StringAssert.IsMatch("type4", addr.Type); + + addr.Options = options; + + StringAssert.IsMatch("name4", addr.Name); + StringAssert.IsMatch("subject4", addr.Subject); + opts = addr.Options; + Assert.AreEqual(3, opts.Count); + StringAssert.IsMatch("", addr.Type); + } + + } +} diff --git a/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.connection.cs b/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.connection.cs new file mode 100644 index 0000000000..dd368b5e5e --- /dev/null +++ b/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.connection.cs @@ -0,0 +1,100 @@ +/* + * + * 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. + * + */ + +namespace Org.Apache.Qpid.Messaging.UnitTest +{ + using System; + using System.Collections.Generic; + using System.Collections.ObjectModel; + using Org.Apache.Qpid.Messaging; + using NUnit.Framework; + + [TestFixture] + public class ConnectionTests + { + [SetUp] + public void SetUp() + { + } + + [TearDown] + public void TearDown() + { + } + + // + // Doing without a real connection + // + [Test] + public void ConnectionCreate_1() + { + Connection myConn = new Connection("url"); + Assert.IsFalse(myConn.IsOpen); + } + + [Test] + public void ConnectionCreate_2() + { + Dictionary options = new Dictionary(); + options["id"] = 987654321; + options["name"] = "Widget"; + options["percent"] = 0.99; + + Connection myConn = new Connection("url", options); + Assert.IsFalse(myConn.IsOpen); + } + + [Test] + public void ConnectionCreate_3() + { + Connection myConn = new Connection("url", "{reconnect:True}"); + Assert.IsFalse(myConn.IsOpen); + } + + [Test] + public void ConnectionSetOption() + { + Dictionary options = new Dictionary(); + options["id"] = 987654321; + options["name"] = "Widget"; + options["percent"] = 0.99; + + Connection myConn = new Connection("url", options); + myConn.SetOption("name", "purple"); + + Assert.IsFalse(myConn.IsOpen); + } + + [Test] + public void ConnectionClose() + { + Dictionary options = new Dictionary(); + options["id"] = 987654321; + options["name"] = "Widget"; + options["percent"] = 0.99; + + Connection myConn = new Connection("url", options); + myConn.Close(); + + Assert.IsFalse(myConn.IsOpen); + } + } +} diff --git a/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.cs b/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.cs index 5ab2698589..dc7af0a7c8 100644 --- a/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.cs +++ b/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.cs @@ -19,209 +19,58 @@ * */ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Org.Apache.Qpid.Messaging; - -namespace Org.Apache.Qpid.Messaging +// +// Note: +// NUnit tests require all libraries to be on the project path +// or in the project working directory. If an unmanaged DLL +// (boost_xxx, for instance) is missing then NUnit will give +// the error message: +// System.IO.FileNotFoundException : +// The specified module could not be found. +// (Exception from HRESULT: 0x8007007E) +// +// Users may need to adjust this project's reference to the +// NUnit assembly. +// + +namespace Org.Apache.Qpid.Messaging.UnitTest { - class Program + using System; + using System.Collections.Generic; + using System.Collections.ObjectModel; + using Org.Apache.Qpid.Messaging; + using NUnit.Framework; + + [TestFixture] + public class BasicTests { - static void Main(string[] args) + [SetUp] + public void SetUp() { - // - // Duration test - stub until proper nunit tests are ready... - - Duration myDuration = new Duration(1234); - - Console.WriteLine("Duration should be : 1234, is : {0}", - myDuration.Milliseconds); - - Console.WriteLine("Duration FOREVER should be : 1.8x10^19 (realbig), is : {0}", - DurationConstants.FORVER.Milliseconds); - - Console.WriteLine("Duration IMMEDIATE should be : 0, is : {0}", - DurationConstants.IMMEDIATE.Milliseconds); - - Console.WriteLine("Duration SECOND should be : 1,000, is : {0}", - DurationConstants.SECOND.Milliseconds); - - Console.WriteLine("Duration MINUTE should be : 60,000, is : {0}", - DurationConstants.MINUTE.Milliseconds); - - Duration isInfinite = new Duration(); - - Console.WriteLine("Duration() should be : realbig, is : {0}", - isInfinite.Milliseconds); - - Duration fiveMinutes = new Duration(DurationConstants.MINUTE.Milliseconds * 5); - Console.WriteLine("Duration 5MINUTE should be : 300,000, is : {0}", - fiveMinutes.Milliseconds); + } - Duration fiveSec = DurationConstants.SECOND * 5; - Console.WriteLine("Duration 5SECOND should be : 5,000 is : {0}", - fiveSec.Milliseconds); - // - // and so on - // + [TearDown] + public void TearDown() + { + } + // + // Types representing amqp.map and amqp.list + // + [Test] + public void TypeTestForDictionary() + { Dictionary dx = new Dictionary(); + + StringAssert.Contains("System.Collections.Generic.Dictionary`2[System.String,System.Object]", dx.GetType().ToString()); + } - Console.WriteLine("Dictionary.GetType() {0}", dx.GetType()); - - // - // Address test - // - Address aEmpty = new Address(); - Address aStr = new Address("rare"); - - Dictionary options = new Dictionary(); - options["one"] = 1; - options["two"] = "two"; - - Address aSubj = new Address("rare2", "subj", options); - - Address aType = new Address ("check3", "subj", options, "hot"); - - Console.WriteLine("aEmpty : {0}", aEmpty.ToStr()); - Console.WriteLine("aStr : {0}", aStr.ToStr()); - Console.WriteLine("aSubj : {0}", aSubj.ToStr()); - Console.WriteLine("aType : {0}", aType.ToStr()); - - // - // Raw message data retrieval - // - - Message m2 = new Message("rarey"); - UInt64 m2Size = m2.ContentSize; - - - byte[] myRaw = new byte [m2Size]; - - m2.GetContent(myRaw); - Console.WriteLine("Got raw array size {0}", m2Size); - for (UInt64 i = 0; i < m2Size; i++) - Console.Write("{0} ", myRaw[i].ToString()); - Console.WriteLine(); - - // - // Raw message creation - // - byte[] rawData = new byte[10]; - for (byte i=0; i<10; i++) - rawData[i] = i; - Message m3 = new Message(rawData); - - byte[] rawDataReadback = new byte[m3.ContentSize]; - m3.GetContent(rawDataReadback); - for (UInt64 i = 0; i < m3.ContentSize; i++) - Console.Write("{0} ", rawDataReadback[i].ToString()); - Console.WriteLine(); - - // - // Raw message from array slice - // - byte[] rawData4 = new byte[256]; - for (int i = 0; i <= 255; i++) - rawData4[i] = (byte)i; - - Message m4 = new Message(rawData4, 246, 10); - - byte[] rawDataReadback4 = new byte[m4.ContentSize]; - m4.GetContent(rawDataReadback4); - for (UInt64 i = 0; i < m4.ContentSize; i++) - Console.Write("{0} ", rawDataReadback4[i].ToString()); - Console.WriteLine(); - - // - // Set content from array slice - // - m4.SetContent(rawData4, 100, 5); - - byte[] rawDataReadback4a = new byte[m4.ContentSize]; - m4.GetContent(rawDataReadback4a); - for (UInt64 i = 0; i < m4.ContentSize; i++) - Console.Write("{0} ", rawDataReadback4a[i].ToString()); - Console.WriteLine(); - - // - // Guid factoids - // - Guid myGuid = new Guid("000102030405060708090a0b0c0d0e0f"); - System.Type typeP = myGuid.GetType(); - System.TypeCode typeCode = System.Type.GetTypeCode(typeP); - - Console.WriteLine("Guid Type = {0}, TypeCode = {1}", - typeP.ToString(), typeCode.ToString()); - // typeP="System.Guid", typeCode="Object" - byte[] guidReadback; - guidReadback = myGuid.ToByteArray(); - - Console.WriteLine("GuidReadback len = {0}", guidReadback.Length); - - // - // Set/Get some properties of a message - // - Message msgGetSet = new Message("12345"); - - msgGetSet.Subject = "Subject"; - msgGetSet.MessageId = "MessageId"; - msgGetSet.UserId = "UserId"; - msgGetSet.CorrelationId = "CorrelationId"; - msgGetSet.Ttl = DurationConstants.SECOND; - msgGetSet.Priority = (byte)'z'; - msgGetSet.Durable = false; - msgGetSet.Redelivered = true; - - Dictionary props = new Dictionary(); - props.Add("firstProperty", 1); - props.Add("secondProperty", 2); - msgGetSet.Properties = props; - - - - Console.WriteLine("Message Subject = {0}", msgGetSet.Subject); - Console.WriteLine("Message ContentType = {0}", msgGetSet.ContentType); - Console.WriteLine("Message MessageId = {0}", msgGetSet.MessageId); - Console.WriteLine("Message UserId = {0}", msgGetSet.UserId); - Console.WriteLine("Message CorrelationId = {0}", msgGetSet.CorrelationId); - Console.WriteLine("Message Ttl mS = {0}", msgGetSet.Ttl.Milliseconds); - Console.WriteLine("Message Priority = {0}", msgGetSet.Priority); - Console.WriteLine("Message Durable = {0}", msgGetSet.Durable); - Console.WriteLine("Message Redelivered = {0}", msgGetSet.Redelivered); - - Dictionary gotProps = msgGetSet.Properties; - foreach (KeyValuePair kvp in gotProps) - { - Console.WriteLine("Message Property {0} = {1}", kvp.Key, kvp.Value.ToString()); - } - - Console.WriteLine("Cycle through a million address copy constructions..."); - Address a1 = new Address("abc"); - Address a2 = new Address("def"); - Address a3 = new Address(a2); - for (int i = 0; i < 1000000; i++) - { - a1 = a2; - a2 = a3; - a3 = new Address(a1); - } - Console.WriteLine(" ...done."); - - Console.WriteLine("Use each object's copy constructor"); - - Address Address1 = new Address("abc"); - Address Address2 = new Address(Address1); - - Connection Connection1 = new Connection("abc"); - Connection Connection2 = new Connection(Connection1); - - Message Message1 = new Message("abc"); - Message Message2 = new Message(Message1); - - + [Test] + public void TypeTestForCollection() + { + Collection cx = new Collection(); + + StringAssert.Contains("System.Collections.ObjectModel.Collection`1[System.Object]", cx.GetType().ToString()); } } } diff --git a/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.csproj b/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.csproj index 914d03d0a6..7ec4d743a3 100644 --- a/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.csproj +++ b/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.csproj @@ -24,12 +24,29 @@ under the License. 9.0.21022 2.0 {AF2FBC78-266C-430C-BC29-9477AB596A36} - Exe + Library Properties messaging.test messaging.test v3.5 512 + + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true true @@ -105,23 +122,41 @@ under the License. prompt - - - 3.5 + + False + C:\Program Files (x86)\NUnit 2.5.3\bin\net-1.1\framework\nunit.framework.dll - - 3.5 - - - 3.5 - - - + + + + + + + False + .NET Framework 2.0 %28x86%29 + false + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + true + + + False + Windows Installer 3.1 + true + + {AA5A3B83-5F98-406D-A01C-5A921467A57D} diff --git a/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.duration.cs b/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.duration.cs new file mode 100644 index 0000000000..2512d7936c --- /dev/null +++ b/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.duration.cs @@ -0,0 +1,99 @@ +/* + * + * 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. + * + */ + +namespace Org.Apache.Qpid.Messaging.UnitTest +{ + using System; + using System.Collections.Generic; + using System.Collections.ObjectModel; + using Org.Apache.Qpid.Messaging; + using NUnit.Framework; + + [TestFixture] + public class DurationTests + { + [SetUp] + public void SetUp() + { + } + + [TearDown] + public void TearDown() + { + } + + [Test] + public void ValueOfUSERVALUE() + { + Duration myDuration = new Duration(1234); + Assert.AreEqual(1234, myDuration.Milliseconds); + } + + [Test] + public void ValueOfFOREVER() + { + bool result = DurationConstants.FORVER.Milliseconds > 1.0E18; + Assert.True(result); + } + + [Test] + public void ValueOfIMMEDIATE() + { + Assert.AreEqual(0, DurationConstants.IMMEDIATE.Milliseconds); + } + + [Test] + public void ValueOfSECOND() + { + Assert.AreEqual(1000, DurationConstants.SECOND.Milliseconds); + } + + + [Test] + public void ValueOfMINUTE() + { + Assert.AreEqual(60000, DurationConstants.MINUTE.Milliseconds); + } + + [Test] + public void ValueOfDefaultIsFOREVER() + { + Duration isInfinite = new Duration(); + + bool result = isInfinite.Milliseconds > 1.0E18; + Assert.True(result); + } + + [Test] + public void ComputedValueFiveMinutes_1() + { + Duration fiveMinutes = new Duration(DurationConstants.MINUTE.Milliseconds * 5); + Assert.AreEqual(5 * 60000, fiveMinutes.Milliseconds); + } + + [Test] + public void ComputedValueFiveMinutes_2() + { + Duration fiveMinutes = new Duration(5 * DurationConstants.MINUTE.Milliseconds); + Assert.AreEqual(5 * 60000, fiveMinutes.Milliseconds); + } + } +} \ No newline at end of file diff --git a/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.message.cs b/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.message.cs new file mode 100644 index 0000000000..ac834047ad --- /dev/null +++ b/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.message.cs @@ -0,0 +1,294 @@ +/* + * + * 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. + * + */ + +namespace Org.Apache.Qpid.Messaging.UnitTest +{ + using System; + using System.Collections.Generic; + using System.Collections.ObjectModel; + using Org.Apache.Qpid.Messaging; + using NUnit.Framework; + + [TestFixture] + public class MessageTests + { + [SetUp] + public void SetUp() + { + } + + [TearDown] + public void TearDown() + { + } + + [Test] + public void SimpleMessageSize() + { + Message m2 = new Message("rarey"); + UInt64 m2Size = m2.ContentSize; + Assert.AreEqual(5, m2Size); + } + + [Test] + public void SimpleMessageStringContent() + { + Message m2 = new Message("rarely"); + string mString = m2.GetContent(); + + StringAssert.IsMatch("rarely", mString); + } + + [Test] + public void MessageReceiveContentAsByteArray() + { + Message m2 = new Message("while"); + UInt64 m2Size = m2.ContentSize; + + byte[] myRaw = new byte [m2Size]; + + m2.GetContent(myRaw); + + Assert.IsTrue(true); + } + + [Test] + public void MessageAsByteArray() + { + byte[] rawData = new byte[10]; + for (byte i = 0; i < 10; i++) + rawData[i] = i; + Message m3 = new Message(rawData); + + byte[] readback = new byte[m3.ContentSize]; + m3.GetContent(readback); + + for (byte i = 0; i < 10; i++) + Assert.AreEqual(i, readback[i]); + } + + [Test] + public void MessageAsByteArraySlice() + { + byte[] rawData = new byte[10]; + for (byte i = 0; i < 10; i++) + rawData[i] = i; + Message m3 = new Message(rawData, 1, 8); + + Assert.AreEqual(8, m3.ContentSize); + + byte[] readback = new byte[m3.ContentSize]; + m3.GetContent(readback); + + for (byte i = 0; i < 8; i++) + Assert.AreEqual(i + 1, readback[i]); + } + + + [Test] + public void MessageProperties() + { + Message msgGetSet = new Message("12345"); + + msgGetSet.Subject = "Subject"; + msgGetSet.MessageId = "MessageId"; + msgGetSet.UserId = "UserId"; + msgGetSet.CorrelationId = "CorrelationId"; + msgGetSet.Ttl = DurationConstants.SECOND; + msgGetSet.Priority = (byte)'z'; + msgGetSet.Durable = false; + msgGetSet.Redelivered = true; + + Dictionary props = new Dictionary(); + props.Add("firstProperty", 1); + props.Add("secondProperty", 2); + msgGetSet.Properties = props; + + Address replyToAddr = new Address("replyTo"); + replyToAddr.Subject = "topsecret"; + msgGetSet.ReplyTo = replyToAddr; + + StringAssert.IsMatch("Subject", msgGetSet.Subject); + StringAssert.IsMatch("", msgGetSet.ContentType); + StringAssert.IsMatch("MessageId", msgGetSet.MessageId); + StringAssert.IsMatch("UserId", msgGetSet.UserId); + StringAssert.IsMatch("CorrelationId", msgGetSet.CorrelationId); + Assert.AreEqual(1000, msgGetSet.Ttl.Milliseconds); + Assert.AreEqual((byte)'z', msgGetSet.Priority); + Assert.IsFalse( msgGetSet.Durable); + Assert.IsTrue( msgGetSet.Redelivered); + + Dictionary gotProps = msgGetSet.Properties; + StringAssert.IsMatch("1", gotProps["firstProperty"].ToString()); + StringAssert.IsMatch("2", gotProps["secondProperty"].ToString()); + + Address gotReply = msgGetSet.ReplyTo; + StringAssert.IsMatch("replyTo", gotReply.Name); + StringAssert.IsMatch("topsecret", msgGetSet.ReplyTo.Subject); + } + + [Test] + public void SimpleMessageCopy() + { + Message m2 = new Message("rarely"); + Message m3 = m2; + + StringAssert.IsMatch("rarely", m3.GetContent()); + } + + [Test] + public void MessageAsMap_AllVariableTypes() + { + // + // Create structured content for the message. This example builds a + // map of items including a nested map and a list of values. + // + Dictionary content = new Dictionary(); + Dictionary subMap = new Dictionary(); + Collection colors = new Collection(); + + // add simple types + content["id"] = 987654321; + content["name"] = "Widget"; + content["percent"] = 0.99; + + // add nested amqp/map + subMap["name"] = "Smith"; + subMap["number"] = 354; + content["nestedMap"] = subMap; + + // add an amqp/list + colors.Add("red"); + colors.Add("green"); + colors.Add("white"); + // list contains null value + colors.Add(null); + content["colorsList"] = colors; + + // add one of each supported amqp data type + bool mybool = true; + content["mybool"] = mybool; + + byte mybyte = 4; + content["mybyte"] = mybyte; + + UInt16 myUInt16 = 5; + content["myUInt16"] = myUInt16; + + UInt32 myUInt32 = 6; + content["myUInt32"] = myUInt32; + + UInt64 myUInt64 = 7; + content["myUInt64"] = myUInt64; + + char mychar = 'h'; + content["mychar"] = mychar; + + Int16 myInt16 = 9; + content["myInt16"] = myInt16; + + Int32 myInt32 = 10; + content["myInt32"] = myInt32; + + Int64 myInt64 = 11; + content["myInt64"] = myInt64; + + Single mySingle = (Single)12.12; + content["mySingle"] = mySingle; + + Double myDouble = 13.13; + content["myDouble"] = myDouble; + + Guid myGuid = new Guid("000102030405060708090a0b0c0d0e0f"); + content["myGuid"] = myGuid; + + content["myNull"] = null; + + // Create the message + Message message = new Message(content); + + // Copy the message + Message rxMsg = message; + + // Extract the content + Dictionary rxContent = new Dictionary(); + + rxMsg.GetContent(rxContent); + + Dictionary rxSubMap = (Dictionary)rxContent["nestedMap"]; + + Collection rxColors = (Collection)rxContent["colorsList"]; + + StringAssert.IsMatch("System.Boolean", rxContent["mybool"].GetType().ToString()); + bool rxbool = (bool)rxContent["mybool"]; + + StringAssert.IsMatch("System.SByte", rxContent["mybyte"].GetType().ToString()); + sbyte rxbyte = (sbyte)rxContent["mybyte"]; + + StringAssert.IsMatch("System.UInt16", rxContent["myUInt16"].GetType().ToString()); + UInt16 rxUInt16 = (UInt16)rxContent["myUInt16"]; + + StringAssert.IsMatch("System.UInt32", rxContent["myUInt32"].GetType().ToString()); + UInt32 rxUInt32 = (UInt32)rxContent["myUInt32"]; + + StringAssert.IsMatch("System.UInt64", rxContent["myUInt64"].GetType().ToString()); + UInt64 rxUInt64 = (UInt64)rxContent["myUInt64"]; + + StringAssert.IsMatch("System.Int32", rxContent["mychar"].GetType().ToString()); + char rxchar = System.Convert.ToChar(rxContent["mychar"]); + + StringAssert.IsMatch("System.Int16", rxContent["myInt16"].GetType().ToString()); + Int16 rxInt16 = (Int16)rxContent["myInt16"]; + + StringAssert.IsMatch("System.Int32", rxContent["myInt32"].GetType().ToString()); + Int32 rxInt32 = (Int32)rxContent["myInt32"]; + + StringAssert.IsMatch("System.Int64", rxContent["myInt64"].GetType().ToString()); + Int64 rxInt64 = (Int64)rxContent["myInt64"]; + + StringAssert.IsMatch("System.Single", rxContent["mySingle"].GetType().ToString()); + Single rxSingle = (Single)rxContent["mySingle"]; + + StringAssert.IsMatch("System.Double", rxContent["myDouble"].GetType().ToString()); + Double rxDouble = (Double)rxContent["myDouble"]; + + StringAssert.IsMatch("System.Guid", rxContent["myGuid"].GetType().ToString()); + Guid rxGuid = (Guid)rxContent["myGuid"]; + + // Verify the values + + StringAssert.IsMatch("Smith", rxSubMap["name"].ToString()); + Assert.AreEqual(4, rxColors.Count); + Assert.IsTrue(rxbool); + Assert.AreEqual(4, rxbyte); + Assert.AreEqual(5, rxUInt16); + Assert.AreEqual(6, rxUInt32); + Assert.AreEqual(7, rxUInt64); + Assert.AreEqual((char)'h', rxchar); + Assert.AreEqual(9, rxInt16); + Assert.AreEqual(10, rxInt32); + Assert.AreEqual(11, rxInt64); + Assert.AreEqual((Single)12.12, rxSingle); + Assert.AreEqual((Double)13.13, rxDouble); + StringAssert.IsMatch("00010203-0405-0607-0809-0a0b0c0d0e0f", rxGuid.ToString()); + } + } +} -- cgit v1.2.1