You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ch...@apache.org on 2010/11/18 22:41:35 UTC

svn commit: r1036644 - in /qpid/trunk/qpid/cpp/bindings/qpid/dotnet/test/messaging.test: messaging.test.address.cs messaging.test.connection.cs messaging.test.cs messaging.test.csproj messaging.test.duration.cs messaging.test.message.cs

Author: chug
Date: Thu Nov 18 21:41:34 2010
New Revision: 1036644

URL: http://svn.apache.org/viewvc?rev=1036644&view=rev
Log:
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.

Added:
    qpid/trunk/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.address.cs
    qpid/trunk/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.connection.cs
    qpid/trunk/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.duration.cs
    qpid/trunk/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.message.cs
Modified:
    qpid/trunk/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.cs
    qpid/trunk/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.csproj

Added: qpid/trunk/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.address.cs
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.address.cs?rev=1036644&view=auto
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.address.cs (added)
+++ qpid/trunk/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.address.cs Thu Nov 18 21:41:34 2010
@@ -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<string, object> 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<string, object> opts = addr.Options;
+            Assert.AreEqual(0, opts.Count);
+            StringAssert.IsMatch("", addr.Type);
+        }
+
+
+        [Test]
+        public void AddressConstructor_NameSubjOpts()
+        {
+            Dictionary<string, object> options = new Dictionary<string, object>();
+            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<string, object> opts = addr.Options;
+            Assert.AreEqual(3, opts.Count);
+            StringAssert.IsMatch("", addr.Type);
+        }
+
+        [Test]
+        public void AddressConstructor_NameSubjOptsType()
+        {
+            Dictionary<string, object> options = new Dictionary<string, object>();
+            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<string, object> opts = addr.Options;
+            Assert.AreEqual(3, opts.Count);
+            StringAssert.IsMatch("type3", addr.Type);
+        }
+
+        [Test]
+        public void AddressProperty()
+        {
+            Dictionary<string, object> options = new Dictionary<string, object>();
+            options["one"] = 1;
+            options["two"] = "two";
+            options["pi"] = 3.14159;
+            Dictionary<string, object> 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);
+        }
+
+    }
+}

Added: qpid/trunk/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.connection.cs
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.connection.cs?rev=1036644&view=auto
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.connection.cs (added)
+++ qpid/trunk/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.connection.cs Thu Nov 18 21:41:34 2010
@@ -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<string, object> options = new Dictionary<string, object>();
+            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<string, object> options = new Dictionary<string, object>();
+            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<string, object> options = new Dictionary<string, object>();
+            options["id"] = 987654321;
+            options["name"] = "Widget";
+            options["percent"] = 0.99;
+
+            Connection myConn = new Connection("url", options);
+            myConn.Close();
+
+            Assert.IsFalse(myConn.IsOpen);
+        }
+    }
+}

Modified: qpid/trunk/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.cs
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.cs?rev=1036644&r1=1036643&r2=1036644&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.cs (original)
+++ qpid/trunk/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.cs Thu Nov 18 21:41:34 2010
@@ -19,209 +19,58 @@
  *
  */
 
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using 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
+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<string, object> dx = new Dictionary<string, object>();
+            
+            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<string, object> options = new Dictionary<string,object>();
-            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<string, object> props = new Dictionary<string,object>();
-            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<string, object> gotProps = msgGetSet.Properties;
-            foreach (KeyValuePair<string, object> 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<object> cx = new Collection<object>();
+            
+            StringAssert.Contains("System.Collections.ObjectModel.Collection`1[System.Object]", cx.GetType().ToString());
         }
     }
 }

Modified: qpid/trunk/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.csproj
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.csproj?rev=1036644&r1=1036643&r2=1036644&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.csproj (original)
+++ qpid/trunk/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.csproj Thu Nov 18 21:41:34 2010
@@ -24,12 +24,29 @@ under the License.
     <ProductVersion>9.0.21022</ProductVersion>
     <SchemaVersion>2.0</SchemaVersion>
     <ProjectGuid>{AF2FBC78-266C-430C-BC29-9477AB596A36}</ProjectGuid>
-    <OutputType>Exe</OutputType>
+    <OutputType>Library</OutputType>
     <AppDesignerFolder>Properties</AppDesignerFolder>
     <RootNamespace>messaging.test</RootNamespace>
     <AssemblyName>messaging.test</AssemblyName>
     <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
     <FileAlignment>512</FileAlignment>
+    <StartupObject>
+    </StartupObject>
+    <PublishUrl>publish\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -105,24 +122,42 @@ under the License.
     <ErrorReport>prompt</ErrorReport>
   </PropertyGroup>
   <ItemGroup>
-    <Reference Include="System" />
-    <Reference Include="System.Core">
-      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    <Reference Include="nunit.framework, Version=2.5.3.9345, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>C:\Program Files (x86)\NUnit 2.5.3\bin\net-1.1\framework\nunit.framework.dll</HintPath>
     </Reference>
-    <Reference Include="System.Xml.Linq">
-      <RequiredTargetFramework>3.5</RequiredTargetFramework>
-    </Reference>
-    <Reference Include="System.Data.DataSetExtensions">
-      <RequiredTargetFramework>3.5</RequiredTargetFramework>
-    </Reference>
-    <Reference Include="System.Data" />
-    <Reference Include="System.Xml" />
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="messaging.test.address.cs" />
+    <Compile Include="messaging.test.connection.cs" />
     <Compile Include="messaging.test.cs" />
+    <Compile Include="messaging.test.duration.cs" />
+    <Compile Include="messaging.test.message.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
   </ItemGroup>
   <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 2.0 %28x86%29</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.0 %28x86%29</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+      <Visible>False</Visible>
+      <ProductName>Windows Installer 3.1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <ItemGroup>
     <ProjectReference Include="..\..\src\org.apache.qpid.messaging.vcproj">
       <Project>{AA5A3B83-5F98-406D-A01C-5A921467A57D}</Project>
       <Name>Org.Apache.Qpid.Messaging</Name>

Added: qpid/trunk/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.duration.cs
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.duration.cs?rev=1036644&view=auto
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.duration.cs (added)
+++ qpid/trunk/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.duration.cs Thu Nov 18 21:41:34 2010
@@ -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

Added: qpid/trunk/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.message.cs
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.message.cs?rev=1036644&view=auto
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.message.cs (added)
+++ qpid/trunk/qpid/cpp/bindings/qpid/dotnet/test/messaging.test/messaging.test.message.cs Thu Nov 18 21:41:34 2010
@@ -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<string, object> props = new Dictionary<string,object>();
+            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<string, object> 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<string, object> content = new Dictionary<string, object>();
+            Dictionary<string, object> subMap = new Dictionary<string, object>();
+            Collection<object> colors = new Collection<object>();
+
+            // 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<string, object> rxContent = new Dictionary<string, object>();
+
+            rxMsg.GetContent(rxContent);
+
+            Dictionary<string, object> rxSubMap = (Dictionary<string, object>)rxContent["nestedMap"];
+
+            Collection<object> rxColors = (Collection<object>)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());
+        }
+    }
+}



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org