public void NestedInvoker()
        {
            PassThroughInvoker passThrough = new PassThroughInvoker();

            this.parameters = new CircuitBreakerStateParameters
            {
                stateMachine = this.parameters.stateMachine,
                settings     = this.parameters.settings,
                invoker      = passThrough
            };
            var state = new CircuitBreakerStateNormal(this.parameters);

            this.stateMachine.SetupProperty(m => m.State, state);

            int  counter = 0;
            Task t       = state.ExecuteAsync <bool>(async() =>
            {
                await Task.Delay(TimeSpan.FromMilliseconds(1));
                counter++;
                return(true);
            });

            t.Wait();

            Assert.AreEqual(1, counter);
            Assert.IsTrue(passThrough.Verify);
        }
 public void TestInitialize()
 {
     this.stateMachine = new Mock <CircuitBreakerStateMachine>();
     this.settings     = new CircuitBreakerSettings();
     this.invoker      = new InnerCommandInvoker();
     this.parameters   = new CircuitBreakerStateParameters
     {
         stateMachine = this.stateMachine.Object,
         settings     = this.settings,
         invoker      = this.invoker
     };
 }
        public void StateChangedNotification()
        {
            var parameters = new CircuitBreakerStateParameters
            {
                stateMachine = this.stateMachine,
                settings     = new CircuitBreakerSettings(),
                invoker      = new InnerCommandInvoker()
            };
            var  newState  = new CircuitBreakerStateNormal(parameters);
            bool wasCalled = false;

            this.stateMachine.StateChanged += (sender, e) =>
            {
                wasCalled = true;

                Assert.AreEqual(this.initialState.Object, e.Previous);
                Assert.AreEqual(newState, e.Current);
            };
            this.stateMachine.State = newState;

            Assert.IsTrue(wasCalled);
            Assert.AreEqual(newState, this.stateMachine.State);
        }