ProcessMailBox is an Inter-Process mailbox. A mailbox is a blocking single item container.
All members of this class are thread-safe.
Inheritance: IDisposable
Exemplo n.º 1
0
        public void CanSyncSetGetMailBoxContent()
        {
            const int N = 10;
            const int SecondsTimeout = 30;

            var list = new List<int>();
            using (var mailBox = new ProcessMailBox("mailBox", TimeSpan.FromMilliseconds(-1)))
            {
                var setTask = Task.Factory.StartNew(() =>
                    {
                        for (var i = 0; i < N; i++)
                        {
                            mailBox.Content = i;
                        }
                    });

                var getTask = Task.Factory.StartNew(() =>
                {
                    for (var i = 0; i < N; i++)
                    {
                        list.Add((int)mailBox.Content);
                    }
                });

                setTask.Wait(TimeSpan.FromSeconds(SecondsTimeout)).Should().BeTrue();
                getTask.Wait(TimeSpan.FromSeconds(SecondsTimeout)).Should().BeTrue();
            }

            list.Count.Should().Be(N);

            for (var i = 0; i < N; i++)
            {
                list.Contains(i).Should().BeTrue();
            }
        }
Exemplo n.º 2
0
        public void CanUseTestObserver()
        {
            const string MailBoxName = "box";
            const string ErrorText = "error";
            using (var mailBox = new ProcessMailBox(MailBoxName, TimeSpan.FromMilliseconds(-1)))
            {
                using (var observer = new TestObserver(MailBoxName))
                {
                    var list = new List<object>();

                    var taskObserve = Task.Factory.StartNew(
                        () =>
                            {
                                observer.OnNext(PerTestResultGenerator.CreatePerfResult());
                                observer.OnError(new Exception(ErrorText));
                                observer.OnCompleted();
                            });

                    var taskMailBox = Task.Factory.StartNew(
                        () =>
                            {
                                list.Add(mailBox.Content);
                                list.Add(mailBox.Content);
                                list.Add(mailBox.Content);
                            });

                    Task.WaitAll(new[] { taskObserve, taskMailBox }, TimeSpan.FromSeconds(20)).Should().BeTrue();
                    list.Count.Should().Be(3);
                    list[0].Should().Be(PerTestResultGenerator.CreatePerfResult());
                    list[1].Should().Be(new ExperimentError(new Exception(ErrorText)));
                    list[2].Should().Be(new ExperimentCompleted());
                }
            }
        }
Exemplo n.º 3
0
        public void CanSetGetMailBoxContent()
        {
            const string Content = "Content";
            using (var mailBox = new ProcessMailBox("mailBox", TimeSpan.FromMilliseconds(-1)))
            {
                mailBox.Content = Content;

                var value = mailBox.Content;

                value.ShouldBeEquivalentTo(Content);
            }
        }
Exemplo n.º 4
0
 private static void SendError(Exception ex)
 {
     if (string.IsNullOrEmpty(channelName))
     {
         Console.Error.WriteLine(ex.ToString());
     }
     else
     {
         using (var mailBox = new ProcessMailBox(channelName, TimeSpan.FromSeconds(5)))
         {
             mailBox.Content = new ExperimentError(ex);
         }
     }
 }
Exemplo n.º 5
0
        public void CanObserveTestRunner()
        {
            var setUpCounter = 0;
            var testCounter = 0;
            var tearDownCounter = 0;
            const int Start = 0;
            const int Step = 7;
            const int End = 135;
            const string MailBoxName = "box";

            using (var mailBox = new ProcessMailBox(MailBoxName, TimeSpan.FromMilliseconds(-1)))
            {
                using (var observer = new TestObserver(MailBoxName))
                {
                    var list = new List<PerfTestResult>();
                    var runner = new TestRunner(i => setUpCounter++, () => testCounter++, () => tearDownCounter++, i => i / 2d, Start, Step, End);

                    var taskObserve = Task.Factory.StartNew(
                        () =>
                        {
                            runner.Subscribe(observer);
                        });

                    var taskMailBox = Task.Factory.StartNew(
                        () =>
                        {
                            for (int i = Start; i < End; i += Step)
                            {
                                list.Add((PerfTestResult)mailBox.Content);
                            }
                        });

                    Task.WaitAll(new[] { taskObserve, taskMailBox }, TimeSpan.FromSeconds(20)).Should().BeTrue();

                    var count = (int)Math.Ceiling((End - Start + 1) / (double)Step);
                    setUpCounter.Should().Be(count);
                    testCounter.Should().Be(count);
                    tearDownCounter.Should().Be(count);

                    var index = 0;
                    for (var i = Start; i < End; i += Step)
                    {
                        list[index++].Descriptor.Should().Be(i / 2d);
                    }
                }
            }
        }