/// <summary> /// Creates a new queue with the specified name. /// </summary> /// <param name="name">Queue name</param> /// <returns>The newly created queue instance.</returns> public INamedQueue CreateQueue(string name) { lock (_queues) { if (_queues.Contains(name)) { throw new ArgumentException( string.Format("The queue with the name {0} already exists.", name)); } var newQueue = new MemoryNamedQueue(name); _queues.Add(newQueue); return(newQueue); } }
public void DeleteGotMessageOnSameThreadWorks() { // --- Arrange var testQueue = new MemoryNamedQueue("name"); testQueue.PutMessage("content", 30); // --- Act var gotmsg = testQueue.GetMessages(1, 30).ToArray()[0]; testQueue.DeleteMessage(gotmsg); // --- Assert testQueue.PeekMessages(3).Count().ShouldEqual(0); }
public void DeleteGotMessageOnDifferentThreadsFails() { // --- Arrange var testQueue = new MemoryNamedQueue("name"); testQueue.PutMessage("content", 30); var getTask = new Task(() => { Thread.Sleep(1050); testQueue.GetMessages(1, 20); }); // --- Act var msg = testQueue.GetMessages(1, 1).ToArray()[0]; getTask.Start(); Thread.Sleep(1200); testQueue.DeleteMessage(msg); // --- Assert getTask.Wait(); }
public void GetApproximateMessageCountWorks() { // --- Arrange var testQueue = new MemoryNamedQueue("name"); testQueue.PutMessage("content1", 30); testQueue.PutMessage("content2", 30); testQueue.PutMessage("content3", 30); // --- Act var count1 = testQueue.GetApproximateMessageCount(); var messages = testQueue.GetMessages(2, 30).ToList(); var count2 = testQueue.GetApproximateMessageCount(); // ReSharper disable PossibleMultipleEnumeration testQueue.DeleteMessage(messages[0]); testQueue.DeleteMessage(messages[1]); // ReSharper restore PossibleMultipleEnumeration var count3 = testQueue.GetApproximateMessageCount(); // --- Assert count1.ShouldEqual(3); count2.ShouldEqual(3); count3.ShouldEqual(1); }
public void GetQueueInParalellWorks() { // --- Arrange var testProvider = new MemoryNamedQueueProvider(); testProvider.CreateQueue("name1"); testProvider.CreateQueue("name2"); testProvider.CreateQueue("name3"); var testQueueArray = new MemoryNamedQueue[2]; const int TO = 2; var expected = (MemoryNamedQueue)testProvider.GetQueue("name2"); // ---- Act Parallel.For(0, TO, i => testQueueArray[i] = (MemoryNamedQueue)testProvider.GetQueue("name2")); // --- Assert testQueueArray[0].ShouldNotBeNull(); testQueueArray[1].ShouldNotBeNull(); testQueueArray[0].Name.ShouldEqual(expected.Name); testQueueArray[1].Name.ShouldEqual(expected.Name); }
public void GetMessageAfterTimeOutWorks() { // --- Arrange var testQueue = new MemoryNamedQueue("name"); testQueue.PutMessage("content", 30); var expectedMessage = testQueue.GetMessages(1, 0).First(); Thread.Sleep(500); var getTask = new Task(() => { var tresult = testQueue.GetMessages(1, 1); tresult.Count().ShouldEqual(1); }); // --- Act getTask.Start(); Thread.Sleep(100); var result1 = testQueue.GetMessages(1, 20).ToList(); Thread.Sleep(1100); var result2 = testQueue.GetMessages(1, 20).ToList(); // --- Assert result1.Count.ShouldEqual(0); result2.Count.ShouldEqual(1); var resultMessage = result2.First(); resultMessage.MessageText.ShouldEqual(expectedMessage.MessageText); resultMessage.PopReceipt.ShouldNotEqual(expectedMessage.PopReceipt); resultMessage.InsertionTime.ShouldEqual(expectedMessage.InsertionTime); resultMessage.ExpirationTime.ShouldEqual(expectedMessage.ExpirationTime); resultMessage.DequeueCount.ShouldEqual(expectedMessage.DequeueCount + 2); resultMessage.Id.ShouldEqual(expectedMessage.Id); getTask.Wait(); }
public void PeekMessageWithTimeOutWorks() { // --- Arrange var testQueue = new MemoryNamedQueue("name"); testQueue.PutMessage("content", 10); testQueue.GetMessages(1, 5); // --- Act var expectedMessage = testQueue.PeekMessages(1); // --- Assert expectedMessage.ShouldHaveCountOf(0); }
public void GetMessageInParallelWorks() { // --- Arrange var testQueue = new MemoryNamedQueue("name"); testQueue.PutMessage("content1", 30); testQueue.PutMessage("content2", 30); testQueue.PutMessage("content3", 30); const int TO = 10; var result = new IEnumerable<IPoppedMessage>[TO]; var expected = testQueue.PeekMessages(3); var expIdList = expected.Select(queuedMessage => queuedMessage.Id).ToList(); // --- Act Parallel.For(0, TO, i => result[i] = testQueue.GetMessages(5, 20)); // --- Assert var resultIdList = ( from poppedMessage in result from message in poppedMessage select message.Id).ToList(); foreach (var expId in expIdList) { var got = resultIdList.Count(resultId => expId == resultId); got.ShouldEqual(1); } }