From 163810f640911e93e3d49e3ef4dd0c972a166c62 Mon Sep 17 00:00:00 2001 From: Michael Barker Date: Wed, 3 Jun 2009 18:57:25 +0000 Subject: 2009-05-23 Michael Barker * MessageEnumerator.cs: Added calls to the delegate IMessageEnumerator for methods that use a timeout and added exception handling. * MessageEnumeratorTest.cs: Added tests for timeout methods. * MessageFactory.cs: Moved TimeSpanToInt32 method to here. * RabbitMQMessageEnumerator.cs: Added Remove/MoveNext methods that include timeouts. * RabbitMQMessageQueue.cs: Updated to cater for moved TimeSpanToInt32 method * MessageEnumeratorExceptionTest.cs: New * QueueReferenceTest.cs: Incorrect namespace for test * IMessageEnumerator.cs: Added additional methods to support operations specified by the System.Messaging version. * Mono.Messaging_test.dll.sources: Added MessageEnumeratorExceptionTest.cs * Makefile: Added nunit-mocks.dll to build svn path=/trunk/mcs/; revision=135338 --- .../Mono.Messaging.RabbitMQ/ChangeLog | 25 +++++++++----- .../Mono.Messaging.RabbitMQ/MessageFactory.cs | 9 ++++- .../RabbitMQMessageEnumerator.cs | 34 ++++++++++++++++++- .../RabbitMQMessageQueue.cs | 16 +++------ .../Test/Mono.Messaging.RabbitMQ/ChangeLog | 4 +++ .../MessageEnumeratorTest.cs | 39 ++++++++++++++++++++++ 6 files changed, 104 insertions(+), 23 deletions(-) (limited to 'mcs/class/Mono.Messaging.RabbitMQ') diff --git a/mcs/class/Mono.Messaging.RabbitMQ/Mono.Messaging.RabbitMQ/ChangeLog b/mcs/class/Mono.Messaging.RabbitMQ/Mono.Messaging.RabbitMQ/ChangeLog index 7cefeaa3aec..c2caba20d62 100644 --- a/mcs/class/Mono.Messaging.RabbitMQ/Mono.Messaging.RabbitMQ/ChangeLog +++ b/mcs/class/Mono.Messaging.RabbitMQ/Mono.Messaging.RabbitMQ/ChangeLog @@ -1,3 +1,19 @@ +2009-05-23 Michael Barker + + * MessageFactory.cs: Moved TimeSpanToInt32 method to here. + * RabbitMQMessageEnumerator.cs: Added Remove/MoveNext methods that include + timeouts. + * RabbitMQMessageQueue.cs: Updated to cater for moved TimeSpanToInt32 method + +2009-05-20 Michael Barker + + * RabbitMQMessageEnumerator.cs: Removed references to realms & tickets. + * RabbitMQMessageQueue.cs: Removed references to realms & tickets. + +2009-05-19 Michael Barker + + * RabbitMQMessageQueue.cs: Added comments. + 2008-12-22 Michael Barker * RabbitMQMessageQueue.cs: Changed to extend MessageQueueBase to make use @@ -44,12 +60,3 @@ * RabbitMQMessageQueue.cs: New * RabbitMQMessagingProvider.cs: New - -2009-05-19 Michael Barker - - * RabbitMQMessageQueue.cs: Added comments. - -2009-05-20 Michael Barker - - * RabbitMQMessageEnumerator.cs: Removed references to realms & tickets. - * RabbitMQMessageQueue.cs: Removed references to realms & tickets. \ No newline at end of file diff --git a/mcs/class/Mono.Messaging.RabbitMQ/Mono.Messaging.RabbitMQ/MessageFactory.cs b/mcs/class/Mono.Messaging.RabbitMQ/Mono.Messaging.RabbitMQ/MessageFactory.cs index e48da2ca2ba..cdf57dd7d6a 100644 --- a/mcs/class/Mono.Messaging.RabbitMQ/Mono.Messaging.RabbitMQ/MessageFactory.cs +++ b/mcs/class/Mono.Messaging.RabbitMQ/Mono.Messaging.RabbitMQ/MessageFactory.cs @@ -219,6 +219,13 @@ namespace Mono.Messaging.RabbitMQ { DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, 0); return epoch.AddSeconds (ats.UnixTime).ToLocalTime (); } - + + public static int TimeSpanToInt32 (TimeSpan timespan) + { + if (timespan == TimeSpan.MaxValue) + return -1; + else + return (int) timespan.TotalMilliseconds; + } } } diff --git a/mcs/class/Mono.Messaging.RabbitMQ/Mono.Messaging.RabbitMQ/RabbitMQMessageEnumerator.cs b/mcs/class/Mono.Messaging.RabbitMQ/Mono.Messaging.RabbitMQ/RabbitMQMessageEnumerator.cs index 93be9fd83fe..1a05d371465 100644 --- a/mcs/class/Mono.Messaging.RabbitMQ/Mono.Messaging.RabbitMQ/RabbitMQMessageEnumerator.cs +++ b/mcs/class/Mono.Messaging.RabbitMQ/Mono.Messaging.RabbitMQ/RabbitMQMessageEnumerator.cs @@ -65,6 +65,10 @@ namespace Mono.Messaging.RabbitMQ { } } + public IntPtr CursorHandle { + get { throw new NotImplementedException (); } + } + public void Close () { if (subscription != null) { @@ -117,7 +121,6 @@ namespace Mono.Messaging.RabbitMQ { if (subscription == null) { IModel ch = Model; - //ushort ticket = ch.AccessRequest ("/data"); string finalName = ch.QueueDeclare (qRef.Queue, false); subscription = new Subscription (ch, finalName); @@ -132,6 +135,12 @@ namespace Mono.Messaging.RabbitMQ { Subscription sub = Subscription; return sub.Next (500, out current); } + + public bool MoveNext (TimeSpan timeout) + { + int to = MessageFactory.TimeSpanToInt32 (timeout); + return Subscription.Next (to, out current); + } public IMessage RemoveCurrent () { @@ -153,6 +162,29 @@ namespace Mono.Messaging.RabbitMQ { throw new NotSupportedException ("Unable to remove messages within a transaction"); } + public IMessage RemoveCurrent (TimeSpan timeout) + { + // Timeout makes no sense for this implementation, so we just work + // the same as the non-timeout based one. + + if (current == null) + throw new InvalidOperationException (); + + IMessage msg = CreateMessage (current); + Subscription.Ack (current); + return msg; + } + + public IMessage RemoveCurrent (TimeSpan timeout, IMessageQueueTransaction transaction) + { + throw new NotImplementedException (); + } + + public IMessage RemoveCurrent (TimeSpan timeout, MessageQueueTransactionType transactionType) + { + throw new NotImplementedException (); + } + private IMessage CreateMessage (BasicDeliverEventArgs result) { return helper.ReadMessage (qRef, result); diff --git a/mcs/class/Mono.Messaging.RabbitMQ/Mono.Messaging.RabbitMQ/RabbitMQMessageQueue.cs b/mcs/class/Mono.Messaging.RabbitMQ/Mono.Messaging.RabbitMQ/RabbitMQMessageQueue.cs index ea35c687760..ef2f6461df1 100644 --- a/mcs/class/Mono.Messaging.RabbitMQ/Mono.Messaging.RabbitMQ/RabbitMQMessageQueue.cs +++ b/mcs/class/Mono.Messaging.RabbitMQ/Mono.Messaging.RabbitMQ/RabbitMQMessageQueue.cs @@ -590,7 +590,7 @@ namespace Mono.Messaging.RabbitMQ { private static TxReceiver.DoReceive Receiver (TimeSpan timeout, IsMatch matcher) { - int to = TimeSpanToInt32 (timeout); + int to = MessageFactory.TimeSpanToInt32 (timeout); return new DoReceiveWithTimeout (to, matcher).DoReceive; } @@ -601,7 +601,7 @@ namespace Mono.Messaging.RabbitMQ { private static TxReceiver.DoReceive Receiver (TimeSpan timeout) { - int to = TimeSpanToInt32 (timeout); + int to = MessageFactory.TimeSpanToInt32 (timeout); return new DoReceiveWithTimeout (to, null).DoReceive; } @@ -617,7 +617,7 @@ namespace Mono.Messaging.RabbitMQ { private TxReceiver.DoReceive Peeker (TimeSpan timeout) { - int to = TimeSpanToInt32 (timeout); + int to = MessageFactory.TimeSpanToInt32 (timeout); return new DoReceiveWithTimeout (to, null, false).DoReceive; } @@ -628,7 +628,7 @@ namespace Mono.Messaging.RabbitMQ { private TxReceiver.DoReceive Peeker (TimeSpan timeout, IsMatch matcher) { - int to = TimeSpanToInt32 (timeout); + int to = MessageFactory.TimeSpanToInt32 (timeout); return new DoReceiveWithTimeout (to, matcher, false).DoReceive; } @@ -714,13 +714,5 @@ namespace Mono.Messaging.RabbitMQ { { return (RabbitMQMessageQueueTransaction) provider.CreateMessageQueueTransaction (); } - - private static int TimeSpanToInt32 (TimeSpan timespan) - { - if (timespan == TimeSpan.MaxValue) - return -1; - else - return (int) timespan.TotalMilliseconds; - } } } diff --git a/mcs/class/Mono.Messaging.RabbitMQ/Test/Mono.Messaging.RabbitMQ/ChangeLog b/mcs/class/Mono.Messaging.RabbitMQ/Test/Mono.Messaging.RabbitMQ/ChangeLog index 852578cde3f..8de774bbb81 100644 --- a/mcs/class/Mono.Messaging.RabbitMQ/Test/Mono.Messaging.RabbitMQ/ChangeLog +++ b/mcs/class/Mono.Messaging.RabbitMQ/Test/Mono.Messaging.RabbitMQ/ChangeLog @@ -1,3 +1,7 @@ +2009-05-23 Michael Barker + + * MessageEnumeratorTest.cs: Added tests for timeout methods. + 2009-01-05 Michael Barker * BinaryMessageFormatter.cs, XMLMessageFormatterTest.cs, TestUtils.cs, diff --git a/mcs/class/Mono.Messaging.RabbitMQ/Test/Mono.Messaging.RabbitMQ/MessageEnumeratorTest.cs b/mcs/class/Mono.Messaging.RabbitMQ/Test/Mono.Messaging.RabbitMQ/MessageEnumeratorTest.cs index ee76fb0f8cf..5535dd7efa3 100644 --- a/mcs/class/Mono.Messaging.RabbitMQ/Test/Mono.Messaging.RabbitMQ/MessageEnumeratorTest.cs +++ b/mcs/class/Mono.Messaging.RabbitMQ/Test/Mono.Messaging.RabbitMQ/MessageEnumeratorTest.cs @@ -87,6 +87,45 @@ namespace MonoTests.Mono.Messaging.RabbitMQ MessageQueue.Delete (qName); } + [Test] + public void RemoveMessageWithTimeout () + { + SendMessage ("message 1"); + SendMessage ("message 2"); + SendMessage ("message 3"); + SendMessage ("message 4"); + + MessageQueue mq0 = MQUtil.GetQueue (qName); + MessageEnumerator me0 = mq0.GetMessageEnumerator (); + + TimeSpan ts = new TimeSpan (0, 0, 2); + + me0.MoveNext (ts); + me0.MoveNext (ts); + me0.MoveNext (ts); + + Message m0 = me0.RemoveCurrent (ts); + + me0.MoveNext (ts); + + me0.Dispose (); + mq0.Dispose (); + + MessageQueue mq1 = MQUtil.GetQueue (qName); + MessageEnumerator me1 = mq1.GetMessageEnumerator (); + + me1.MoveNext (ts); + me1.MoveNext (ts); + me1.MoveNext (ts); + + Message m1 = me1.Current; + m1.Formatter = new BinaryMessageFormatter (); + Assert.AreEqual ("message 4", (String) m1.Body, "body incorrect"); + + mq1.Purge (); + MessageQueue.Delete (qName); + } + //[Test] // Not supported with AMQP public void RemoveMessageWithTx () -- cgit v1.2.3