Пример #1
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());
                }
            }
        }
Пример #2
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);
            }
        }
Пример #3
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);
         }
     }
 }
Пример #4
0
        private void Dispose(bool dispose)
        {
            if (this.disposed)
            {
                return;
            }

            if (dispose)
            {
                this.mailBox.Dispose();
            }

            this.mailBox  = null;
            this.disposed = true;
        }
Пример #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);
                    }
                }
            }
        }
Пример #6
0
 /// <summary>
 /// 功能描述:发送消息到指定进程ID
 /// 作  者:huangzh
 /// 创建日期:2015-08-28 16:11:41
 /// 任务编号:
 /// </summary>
 /// <param name="value">非接口调用,传null</param>
 /// <param name="strProcessID">进程ID</param>
 /// <param name="objMsg">objMsg</param>
 public static void SendMsgToProcess <T>(
     this T value,
     string strProcessID,
     object objMsg) where T : IProcessMessage
 {
     try
     {
         ProcessMailBox mail = new ProcessMailBox(strProcessID, 1024, false);
         mail.Content = objMsg;
         //给读取消息留时间
         Thread.Sleep(10);
         //清空消息
         mail.ClearContent();
         mail.Dispose();
     }
     catch
     {
         throw;
     }
 }
Пример #7
0
 /// <summary>
 /// 功能描述:从指定进程读取消息
 /// 作  者:huangzh
 /// 创建日期:2015-08-28 16:11:59
 /// 任务编号:
 /// </summary>
 /// <param name="value">非接口调用,传null</param>
 /// <param name="strMsgFrom">strToolProcessName</param>
 public static void ReadMsgFromProcess <T>(this T value, string strMsgFrom) where T : IProcessMessage
 {
     try
     {
         if (OnMsg == null)
         {
             throw new Exception("请初始化OnMsg事件");
         }
         Thread th = new Thread(delegate()
         {
             ProcessMailBox mail = new ProcessMailBox(strMsgFrom, 1024, false);
             try
             {
                 while (true)
                 {
                     if (OnMsg != null)
                     {
                         OnMsg(mail.Content, strMsgFrom);
                         //防止一直读取同一消息
                         Thread.Sleep(20);
                     }
                 }
             }
             catch
             { }
             finally
             {
                 mail.Dispose();
             }
         });
         th.Name         = "读取夸进程消息";
         th.IsBackground = true;
         th.Start();
     }
     catch
     {
         throw;
     }
 }
Пример #8
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();
            }
        }
 public SingleExperimentListener(ExperimentProcess experiment, Action <ExperimentProcess> startProcess)
 {
     this.startProcess = startProcess;
     this.experiment   = experiment;
     this.mailBox      = new ProcessMailBox(this.experiment.ChannelName, TimeSpan.FromMilliseconds(-1));
 }
Пример #10
0
 public TestObserver(string boxName)
 {
     this.mailBox = new ProcessMailBox(boxName, TimeSpan.FromSeconds(5));
 }