diff options
Diffstat (limited to 'qpid/dotnet/client-010/test/interop')
-rw-r--r-- | qpid/dotnet/client-010/test/interop/Admin.cs | 90 | ||||
-rw-r--r-- | qpid/dotnet/client-010/test/interop/ApplicationHeaders.cs | 83 | ||||
-rw-r--r-- | qpid/dotnet/client-010/test/interop/ConnectionTests.cs | 80 | ||||
-rw-r--r-- | qpid/dotnet/client-010/test/interop/Message.cs | 180 | ||||
-rw-r--r-- | qpid/dotnet/client-010/test/interop/TestCase.cs | 96 |
5 files changed, 529 insertions, 0 deletions
diff --git a/qpid/dotnet/client-010/test/interop/Admin.cs b/qpid/dotnet/client-010/test/interop/Admin.cs new file mode 100644 index 0000000000..163e4cf49a --- /dev/null +++ b/qpid/dotnet/client-010/test/interop/Admin.cs @@ -0,0 +1,90 @@ +/* +* +* 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 NUnit.Framework; +using org.apache.qpid.client; +using org.apache.qpid.transport; +using org.apache.qpid.transport.util; + +namespace test.interop +{ + public class Admin : TestCase + { + private static readonly Logger _log = Logger.Get(typeof(Admin)); + + [Test] + public void createSession() + { + _log.Debug("Running: CreateSession"); + IClientSession ssn = Client.CreateSession(0); + ssn.Close(); + // This test fails if an exception is thrown + } + + [Test] + public void queueLifecycle() + { + _log.Debug("Running: queueLifecycle"); + IClientSession ssn = Client.CreateSession(0); + ssn.QueueDeclare("queue1", null, null); + ssn.Sync(); + ssn.QueueDelete("queue1"); + ssn.Sync(); + try + { + ssn.ExchangeBind("queue1", "amq.direct", "queue1", null); + ssn.Sync(); + } + catch (SessionException) + { + // as expected + } + // This test fails if an exception is thrown + } + + [Test] + public void exchangeCheck() + { + _log.Debug("Running: exchangeCheck"); + IClientSession ssn = Client.CreateSession(0); + ExchangeQueryResult query = (ExchangeQueryResult) ssn.ExchangeQuery("amq.direct").Result; + Assert.IsFalse(query.GetNotFound()); + Assert.IsTrue(query.GetDurable()); + query = (ExchangeQueryResult)ssn.ExchangeQuery("amq.topic").Result; + Assert.IsFalse(query.GetNotFound()); + Assert.IsTrue(query.GetDurable()); + query = (ExchangeQueryResult) ssn.ExchangeQuery("foo").Result; + Assert.IsTrue(query.GetNotFound()); + } + + [Test] + public void exchangeBind() + { + _log.Debug("Running: ExchangeBind"); + IClientSession ssn = Client.CreateSession(0); + ssn.QueueDeclare("queue1", null, null); + ssn.ExchangeBind("queue1", "amq.direct", "queue1", null); + // This test fails if an exception is thrown + } + + + } +} diff --git a/qpid/dotnet/client-010/test/interop/ApplicationHeaders.cs b/qpid/dotnet/client-010/test/interop/ApplicationHeaders.cs new file mode 100644 index 0000000000..d932057fd2 --- /dev/null +++ b/qpid/dotnet/client-010/test/interop/ApplicationHeaders.cs @@ -0,0 +1,83 @@ +/* +* +* 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 common.org.apache.qpid.transport.util; +using NUnit.Framework; +using org.apache.qpid.client; +using org.apache.qpid.transport.util; + +namespace test.interop +{ + public class ApplicationHeaders:TestCase + { + private static readonly Logger _log = Logger.Get(typeof(ApplicationHeaders)); + + [Test] + public void setHeaders() + { + _log.Debug("Running: setHeaders"); + IClientSession ssn = Client.CreateSession(0); + ssn.QueueDeclare("queue1"); + ssn.ExchangeBind("queue1", "amq.direct", "queue1"); + ssn.Sync(); + CircularBuffer<IMessage> buff = new CircularBuffer<IMessage>(10); + SyncListener listener = new SyncListener(ssn, buff); + ssn.AttachMessageListener(listener, "queue1"); + ssn.MessageSubscribe("queue1"); + + IMessage message = new org.apache.qpid.client.Message(); + message.DeliveryProperties.SetRoutingKey("queue1"); + const long someLong = 14444444; + message.ApplicationHeaders.Add("someLong", someLong); + const int someInt = 14; + message.ApplicationHeaders.Add("soneInt", someInt); + const float someFloat = 14.001F; + message.ApplicationHeaders.Add("soneFloat", someFloat); + const double someDouble = 14.5555555; + message.ApplicationHeaders.Add("someDouble", someDouble); + const byte someByte = 2; + message.ApplicationHeaders.Add("someByte", someByte); + const string someString = "someString"; + message.ApplicationHeaders.Add("someString", someString); + const char someChar = 'a'; + message.ApplicationHeaders.Add("someChar", someChar); + const Boolean someBoolean = true; + message.ApplicationHeaders.Add("someBoolean", someBoolean); + + // transfer the message + ssn.MessageTransfer("amq.direct", message); + + // get the message and check the headers + IMessage messageBack = buff.Dequeue(); + Assert.IsTrue(((string) messageBack.ApplicationHeaders["someString"]).Equals(someString)); + Assert.IsTrue(((char)messageBack.ApplicationHeaders["someChar"]).Equals(someChar)); + Assert.IsTrue((long)messageBack.ApplicationHeaders["someLong"] == someLong); + Assert.IsTrue((int)messageBack.ApplicationHeaders["soneInt"] == someInt); + Assert.IsTrue((double)messageBack.ApplicationHeaders["someDouble"] == someDouble); + Assert.IsTrue((byte) messageBack.ApplicationHeaders["someByte"] == someByte); + Assert.IsTrue((Boolean)messageBack.ApplicationHeaders["someBoolean"]); + // c# has an conversion precision issue with decimal + Assert.IsTrue((float) messageBack.ApplicationHeaders["soneFloat"] <= someFloat); + float b = (float) messageBack.ApplicationHeaders["soneFloat"]; + Assert.IsTrue(Convert.ToInt32(b) == Convert.ToInt32(someFloat)); + } + } +} diff --git a/qpid/dotnet/client-010/test/interop/ConnectionTests.cs b/qpid/dotnet/client-010/test/interop/ConnectionTests.cs new file mode 100644 index 0000000000..37fd0e7933 --- /dev/null +++ b/qpid/dotnet/client-010/test/interop/ConnectionTests.cs @@ -0,0 +1,80 @@ +/* + * + * 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 System.Net.Sockets; +using NUnit.Framework; +using org.apache.qpid.client; +using test.Helpers; + +namespace test +{ + [TestFixture] + public class ConnectionTests + { + [SetUp] + public void Setup() + { + + } + + [Test] + [ExpectedException(typeof(Exception))] + public void should_raise_exception_in_calling_thread_on_authentification_failure() + { + var properties = ConfigHelpers.LoadConfig(); + + var client = new Client(); + client.Connect(properties["Host"], Convert.ToInt16(properties["Port"]), properties["VirtualHost"], + properties["Username"], "some silly password to make sure the authentification fail"); + } + + [Test] + [ExpectedException(typeof(Exception))] + public void should_raise_exception_in_calling_thread_on_authentification_failure_with_clodedListener() + { + var properties = ConfigHelpers.LoadConfig(); + + var client = new Client(); + client.ClosedListener = new FakeListener(); + client.Connect(properties["Host"], Convert.ToInt16(properties["Port"]), properties["VirtualHost"], + properties["Username"], "some silly password to make sure the authentification fail"); + } + + [Test] + public void should_not_block_on_close() + { + var properties = ConfigHelpers.LoadConfig(); + + var client = new Client(); + client.Connect(properties["Host"], Convert.ToInt16(properties["Port"]), properties["VirtualHost"], + properties["Username"], properties["Password"]); + client.Close(); + } + } + + public class FakeListener : IClosedListener + { + public void OnClosed(ErrorCode errorCode, string reason, Exception t) + { + } + } +} diff --git a/qpid/dotnet/client-010/test/interop/Message.cs b/qpid/dotnet/client-010/test/interop/Message.cs new file mode 100644 index 0000000000..107e69c287 --- /dev/null +++ b/qpid/dotnet/client-010/test/interop/Message.cs @@ -0,0 +1,180 @@ +/* +* +* 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 System.Text; +using System.Threading; +using NUnit.Framework; +using org.apache.qpid.client; +using org.apache.qpid.transport; +using org.apache.qpid.transport.util; + +namespace test.interop +{ + public class Message : TestCase + { + private static readonly Logger _log = Logger.Get(typeof (Message)); + + [Test] + public void sendAndPurge() + { + _log.Debug("Running: ExchangeBind"); + IClientSession ssn = Client.CreateSession(0); + ssn.QueueDelete("queue1"); + QueueQueryResult result = (QueueQueryResult) ssn.QueueQuery("queue1").Result; + Assert.IsNull(result.GetQueue()); + ssn.QueueDeclare("queue1", null, null); + ssn.ExchangeBind("queue1", "amq.direct", "queue1", null); + + for (int i = 0; i < 10; i++) + { + ssn.MessageTransfer("amq.direct", MessageAcceptMode.NONE, MessageAcquireMode.PRE_ACQUIRED, + new Header(new DeliveryProperties().SetRoutingKey("queue1"), + new MessageProperties().SetMessageId(UUID.RandomUuid())), + Encoding.UTF8.GetBytes("test: " + i)); + } + ssn.Sync(); + result = (QueueQueryResult) ssn.QueueQuery("queue1").Result; + Assert.IsTrue(result.GetMessageCount() == 10); + ssn.QueuePurge("queue1"); + ssn.Sync(); + result = (QueueQueryResult) ssn.QueueQuery("queue1").Result; + Assert.IsTrue(result.GetMessageCount() == 0); + } + + [Test] + public void sendAndReceiveSmallMessages() + { + _log.Debug("Running: sendAndReceiveSmallMessages"); + byte[] smallMessage = Encoding.UTF8.GetBytes("test"); + sendAndReceive(smallMessage, 100); + } + + [Test] + public void sendAndReceiveLargeMessages() + { + _log.Debug("Running: sendAndReceiveSmallMessages"); + byte[] largeMessage = new byte[100 * 1024]; + Random random = new Random(); + random.NextBytes(largeMessage); + sendAndReceive(largeMessage, 10); + } + + [Test] + public void sendAndReceiveVeryLargeMessages() + { + _log.Debug("Running: sendAndReceiveSmallMessages"); + byte[] verylargeMessage = new byte[1000 * 1024]; + Random random = new Random(); + random.NextBytes(verylargeMessage); + sendAndReceive(verylargeMessage, 2); + } + + private void sendAndReceive(byte[] messageBody, int count) + { + IClientSession ssn = Client.CreateSession(0); + ssn.Sync(); + ssn.QueueDeclare("queue1", null, null); + ssn.QueueDelete("queue1"); + QueueQueryResult result = (QueueQueryResult) ssn.QueueQuery("queue1").Result; + Assert.IsNull(result.GetQueue()); + ssn.QueueDeclare("queue1", null, null); + ssn.ExchangeBind("queue1", "amq.direct", "queue1", null); + Object myLock = new Object(); + MyListener myListener = new MyListener(myLock, count); + ssn.AttachMessageListener(myListener, "myDest"); + + ssn.MessageSubscribe("queue1", "myDest", MessageAcceptMode.EXPLICIT, MessageAcquireMode.PRE_ACQUIRED, null, + 0, null); + + + // issue credits + ssn.MessageSetFlowMode("myDest", MessageFlowMode.WINDOW); + ssn.MessageFlow("myDest", MessageCreditUnit.BYTE, ClientSession.MESSAGE_FLOW_MAX_BYTES); + ssn.MessageFlow("myDest", MessageCreditUnit.MESSAGE, 10000); + ssn.Sync(); + + for (int i = 0; i < count; i++) + { + ssn.MessageTransfer("amq.direct", MessageAcceptMode.NONE, MessageAcquireMode.PRE_ACQUIRED, + new Header(new DeliveryProperties().SetRoutingKey("queue1"), + new MessageProperties().SetMessageId(UUID.RandomUuid())), + messageBody); + } + ssn.Sync(); + + lock (myLock) + { + if (myListener.Count != 0) + { + Monitor.Wait(myLock, 10000000); + } + } + Assert.IsTrue(myListener.Count == 0); + ssn.MessageAccept(myListener.UnAck); + ssn.Sync(); + // the queue should be empty + result = (QueueQueryResult)ssn.QueueQuery("queue1").Result; + Assert.IsTrue(result.GetMessageCount() == 0); + ssn.Close(); + } + + + + private class MyListener : IMessageListener + { + private static readonly Logger _log = Logger.Get(typeof (MyListener)); + private readonly Object _wl; + private int _count; + private RangeSet _rs = new RangeSet(); + + public MyListener(Object wl, int count) + { + _wl = wl; + _count = count; + } + + public void MessageTransfer(IMessage m) + { + byte[] body = new byte[m.Body.Length - m.Body.Position]; + _log.Debug("Got a message of size: " + body.Length + " count = " + _count); + _rs.Add(m.Id); + lock (_wl) + { + _count--; + if (_count == 0) + { + Monitor.PulseAll(_wl); + } + } + } + + public int Count + { + get { return _count; } + } + + public RangeSet UnAck + { + get { return _rs; } + } + } + } +} diff --git a/qpid/dotnet/client-010/test/interop/TestCase.cs b/qpid/dotnet/client-010/test/interop/TestCase.cs new file mode 100644 index 0000000000..867f082000 --- /dev/null +++ b/qpid/dotnet/client-010/test/interop/TestCase.cs @@ -0,0 +1,96 @@ +/* +* +* 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 System.Collections.Generic; +using System.IO; +using System.Threading; +using System.Xml; +using common.org.apache.qpid.transport.util; +using log4net.Config; +using NUnit.Framework; +using org.apache.qpid.client; +using org.apache.qpid.transport; +using org.apache.qpid.transport.util; +using test.Helpers; + +namespace test.interop +{ + [TestFixture] + + public class TestCase + { + private readonly Dictionary<string,string> _properties = new Dictionary<string, string>(); + private Client _client; + + [TestFixtureSetUp] + public void Init() + { + var properties = ConfigHelpers.LoadConfig(); + // create a client and connect to the broker + _client = new Client(); + _client.Connect(properties["Host"], Convert.ToInt16(properties["Port"]), properties["VirtualHost"], + properties["Username"], properties["Password"]); + + } + + [TestFixtureTearDown] + public void Cleanup() + { + // Note : breaks the Resharper nunit test runner. It blocks on the Monitor.WaitAll() + // Certainly a problem with the threading context.. + //_client.Close(); + } + + public Client Client + { + get{ return _client;} + } + + public Dictionary<string,string> Properties + { + get { return _properties; } + } + + + public class SyncListener : IMessageListener + { + private static readonly Logger _log = Logger.Get(typeof(SyncListener)); + private readonly CircularBuffer<IMessage> _buffer; + private readonly RangeSet _range = new RangeSet(); + private readonly IClientSession _session; + + public SyncListener(IClientSession session, CircularBuffer<IMessage> buffer) + { + _buffer = buffer; + _session = session; + } + + public void MessageTransfer(IMessage m) + { + _range.Clear(); + _range.Add(m.Id); + _session.MessageAccept(_range); + _buffer.Enqueue(m); + } + } + } +} |