public void コンポーネントの活性化()
        {
            var comp = new SimpleComponent("test");

            bool calledActivated = false;
            comp.OnActivated = _ =>
            {
                calledActivated = true;
                return ReturnCode_t.RTC_OK;
            };

            comp.ActivateAsync().Result.Is(ReturnCode_t.RTC_OK);

            calledActivated.Is(true);
        }
        public void 状態が変化しなかったらタイムアウト()
        {
            var comp = new SimpleComponent("test");
            comp.OnActivated = _ =>
            {
                Thread.Sleep(TimeSpan.FromSeconds(3));
                return ReturnCode_t.RTC_OK;
            };

            AssertEx.Throws<TimeoutException>(() =>
                    comp.ActivateAsync()
                    .ToObservable()
                    .Timeout(TimeSpan.FromSeconds(1))
                    .First()
                );
        }
示例#3
0
    public static void Main(string[] args)
    {
        using (var manager = new RtcManager(args))
        {
            var comp = new SimpleComponent("HelloWorld")
                           {
                               OnExecute = _ => {
                                   Console.WriteLine("Hello Wolrd!");
                                   return ReturnCode_t.RTC_OK;
                               }
                           };

            manager.RegisterComponent(comp);

            manager.Run();
        }
    }
示例#4
0
        public void OnExecuteを動かしてみる()
        {
            var comp = new SimpleComponent("test");

            var testScheduler = new TestScheduler();
            var recorder = testScheduler.CreateObserver<ReturnCode_t>();

            comp.ExecutionContextScheduler = testScheduler;

            // OnExecuteが呼ばれるたびにカウンタをインクリメント
            var executeCounter = 0;
            comp.OnExecute = _ =>
            {
                executeCounter = executeCounter + 1;
                return ReturnCode_t.RTC_OK;
            };

            // コンポーネントを活性化
            comp.ActivateAsync().ToObservable().Subscribe(recorder);

            // 時間がたっていないので何も起きていない
            executeCounter.Is(0);
            recorder.Messages.Count.Is(0);

            // 時間を進める
            testScheduler.AdvanceBy(100);

            // 活性化に成功したことを確認
            recorder.Messages.Count.Is(2);
            recorder.Messages.First().Value.Value.Is(ReturnCode_t.RTC_OK);

            executeCounter.Is(0);

            // 時間を5秒進める
            testScheduler.AdvanceBy(TimeSpan.FromSeconds(5).Ticks);

            // OnExecuteは1秒に1回呼ばれる
            executeCounter.Is(5);
        }
 public void 存在しない実行コンテキストを指定したら例外()
 {
     var comp = new SimpleComponent("test");
     AssertEx.Throws<ArgumentOutOfRangeException>(() => comp.DeactivateAsync(1).Wait());
 }
 public void 活性化しているのにActivateしたら失敗()
 {
     var comp = new SimpleComponent("test");
     comp.ActivateAsync().Result.Is(ReturnCode_t.RTC_OK);
     comp.ActivateAsync().Result.Is(ReturnCode_t.PRECONDITION_NOT_MET);
 }
        public void 状態が変化しなかったらタイムアウト()
        {
            var comp = new SimpleComponent("test");

            comp.OnActivated = _ => ReturnCode_t.RTC_ERROR;
            comp.OnReset = _ =>
            {
                Thread.Sleep(TimeSpan.FromSeconds(3));
                return ReturnCode_t.RTC_OK;
            };

            comp.ActivateAsync().Result.Is(ReturnCode_t.RTC_OK);
            AssertEx.Throws<TimeoutException>(() =>
                    comp.ResetAsync(timeout: TimeSpan.FromSeconds(1)).Wait()
                );
        }
        public void コンポーネントのリセット()
        {
            var comp = new SimpleComponent("test");

            comp.OnActivated = _ => ReturnCode_t.RTC_ERROR;

            bool calledReset = false;
            comp.OnReset = _ =>
            {
                calledReset = true;
                return ReturnCode_t.RTC_OK;
            };

            comp.ActivateAsync().Result.Is(ReturnCode_t.RTC_OK);
            comp.ResetAsync().Result.Is(ReturnCode_t.RTC_OK);

            calledReset.Is(true);
        }
 public void エラーが起きていないのにResetしたら失敗()
 {
     var comp = new SimpleComponent("test");
     comp.ResetAsync().Result.Is(ReturnCode_t.PRECONDITION_NOT_MET);
 }