Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Barker <mike@middlesoft.co.uk>2009-06-03 22:57:25 +0400
committerMichael Barker <mike@middlesoft.co.uk>2009-06-03 22:57:25 +0400
commit163810f640911e93e3d49e3ef4dd0c972a166c62 (patch)
tree1e136cc8c02f8fc8884526ad41f6b9af14d55fa2 /mcs/class/Mono.Messaging.RabbitMQ
parent9a2c3234082cf2812da315a4fa58d73b6e2261f4 (diff)
2009-05-23 Michael Barker <mike@middlesoft.co.uk>
* 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
Diffstat (limited to 'mcs/class/Mono.Messaging.RabbitMQ')
-rw-r--r--mcs/class/Mono.Messaging.RabbitMQ/Mono.Messaging.RabbitMQ/ChangeLog25
-rw-r--r--mcs/class/Mono.Messaging.RabbitMQ/Mono.Messaging.RabbitMQ/MessageFactory.cs9
-rw-r--r--mcs/class/Mono.Messaging.RabbitMQ/Mono.Messaging.RabbitMQ/RabbitMQMessageEnumerator.cs34
-rw-r--r--mcs/class/Mono.Messaging.RabbitMQ/Mono.Messaging.RabbitMQ/RabbitMQMessageQueue.cs16
-rw-r--r--mcs/class/Mono.Messaging.RabbitMQ/Test/Mono.Messaging.RabbitMQ/ChangeLog4
-rw-r--r--mcs/class/Mono.Messaging.RabbitMQ/Test/Mono.Messaging.RabbitMQ/MessageEnumeratorTest.cs39
6 files changed, 104 insertions, 23 deletions
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 <mike@middlesoft.co.uk>
+
+ * 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 <mike@middlesoft.co.uk>
+
+ * RabbitMQMessageEnumerator.cs: Removed references to realms & tickets.
+ * RabbitMQMessageQueue.cs: Removed references to realms & tickets.
+
+2009-05-19 Michael Barker <mike@middlesoft.co.uk>
+
+ * RabbitMQMessageQueue.cs: Added comments.
+
2008-12-22 Michael Barker <mike@middlesoft.co.uk>
* RabbitMQMessageQueue.cs: Changed to extend MessageQueueBase to make use
@@ -44,12 +60,3 @@
* RabbitMQMessageQueue.cs: New
* RabbitMQMessagingProvider.cs: New
-
-2009-05-19 Michael Barker <mike@middlesoft.co.uk>
-
- * RabbitMQMessageQueue.cs: Added comments.
-
-2009-05-20 Michael Barker <mike@middlesoft.co.uk>
-
- * 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 <mike@middlesoft.co.uk>
+
+ * MessageEnumeratorTest.cs: Added tests for timeout methods.
+
2009-01-05 Michael Barker <mike@middlesoft.co.uk>
* 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 ()