public void Service_MultiThread_ClearMessages() { var service = GetService(new Dictionary <string, IList <string> > { { "Bob", new[] { "Message" }.ToList() } }); var barrier = new Barrier(2); Func <string, string, IServiceResponse> worker = (nm, msg) => { ThreadingHelper.WriteThreadLine("Waiting for Barrier to Catch Up."); barrier.SignalAndWait(); ThreadingHelper.WriteThreadLine("Barrier Release, Continuing."); return(MakeRequest(service, new ClearMessagesRequest() { Inbox = "Bob" })); }; var client1 = Task.Factory.StartNew(() => worker("C1", FirstMessage)); var client2 = Task.Factory.StartNew(() => worker("C2", SecondMessage)); Assert.IsTrue(client1.Wait(TimeSpan.FromSeconds(10)), "Client 1 Timed out, deadlock detected."); Assert.IsTrue(client2.Wait(TimeSpan.FromSeconds(10)), "Client 2 Timed out, deadlock detected."); Assert.IsFalse(service.MessageStore.ContainsKey("Bob"), "Inbox 'Bob' was not cleared."); }
public void Service_MultiThread_DeliverMessage() { var service = GetService(); var barrier = new Barrier(2); Func <string, string, IServiceResponse> worker = (nm, msg) => { ThreadingHelper.WriteThreadLine("Waiting for Barrier to Catch Up."); barrier.SignalAndWait(); ThreadingHelper.WriteThreadLine("Barrier Release, Continuing."); return(MakeRequest(service, new DeliverMessageRequest { Inbox = "Bob", Message = msg })); }; var client1 = Task.Factory.StartNew(() => worker("C1", FirstMessage)); var client2 = Task.Factory.StartNew(() => worker("C2", SecondMessage)); Assert.IsTrue(client1.Wait(TimeSpan.FromSeconds(10)), "Client 1 Timed out, deadlock detected."); Assert.IsTrue(client2.Wait(TimeSpan.FromSeconds(10)), "Client 2 Timed out, deadlock detected."); Assert.IsTrue(service.MessageStore.ContainsKey("Bob"), "Inbox 'Bob' was not created."); Assert.AreEqual(2, service.MessageStore["Bob"].Count, "Inbox 'Bob' should have 2 messages."); Assert.IsTrue(service.MessageStore["Bob"].Any(x => x == FirstMessage), "First Message was not found."); Assert.IsTrue(service.MessageStore["Bob"].Any(x => x == SecondMessage), "Second Message was not found."); }
public void Service_MultiThread_GetClearMessages() { var service = GetService(new Dictionary <string, IList <string> > { { "Bob", new[] { FirstMessage }.ToList() } }); var barrier = new Barrier(2); Action waitForBarrier = barrier.SignalAndWait; var client1 = Task.Factory .StartNew(waitForBarrier) .ContinueWith(x => { ThreadingHelper.WriteThreadLine("Clear Thread Barrier Released"); return(MakeRequest(service, new ClearMessagesRequest() { Inbox = "Bob" })); }); var client2 = Task.Factory .StartNew(waitForBarrier) .ContinueWith(x => { ThreadingHelper.WriteThreadLine("Delay Thread Barrier Released"); var waitHandle = Task.Delay(20); waitHandle.Wait(); ThreadingHelper.WriteThreadLine("Delay Thread Wait Released"); }) .ContinueWith(x => { ThreadingHelper.WriteThreadLine("Get Thread Making Request"); var response = MakeRequest(service, new GetMessagesRequest() { Inbox = "Bob" }); ThreadingHelper.WriteThreadLine("Get Thread Got Response"); return(response); }); Assert.IsTrue(client1.Wait(TimeSpan.FromSeconds(10)), "Client 1 Timed out, deadlock detected."); Assert.IsTrue(client2.Wait(TimeSpan.FromSeconds(10)), "Client 2 Timed out, deadlock detected."); Assert.IsInstanceOfType(client1.Result, typeof(OkResponse), "Was expecting an OkResponse from the Clear Messages request."); Assert.IsInstanceOfType(client2.Result, typeof(ErrorResponse), "Was expecting an ErrorResponse from the "); }