示例#1
0
        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.");
        }
示例#2
0
        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.");
        }
示例#3
0
        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 ");
        }