public void WhenFailed_FiresBreakerFailureCountMetricEvent()
            {
                // Arrange

                var key = AnyString;

                var mockMetricEvents = new Mock <IMetricEvents>();
                var mockMetrics      = new Mock <ICommandMetrics>();

                var mockBreaker = new Mock <ICircuitBreaker>();

                mockBreaker.SetupGet(m => m.Name).Returns(key);
                mockBreaker.Setup(m => m.IsAllowing()).Returns(true); // We want to get past the initial rejection check.
                mockBreaker.SetupGet(m => m.Metrics).Returns(mockMetrics.Object);

                var mockCircuitBreakerFactory = new Mock <ICircuitBreakerFactory>(MockBehavior.Strict);

                mockCircuitBreakerFactory.Setup(m => m.GetCircuitBreaker(It.IsAny <GroupKey>())).Returns(mockBreaker.Object);

                var mockBreakerExceptionHandler = new Mock <IBreakerExceptionHandler>(MockBehavior.Strict);

                mockBreakerExceptionHandler.Setup(m => m.IsExceptionIgnored(It.IsAny <Type>())).Returns(false);

                var command = new NoOpCommand(); // Should be successful.
                var invoker = new BreakerInvoker(mockCircuitBreakerFactory.Object, mockMetricEvents.Object, mockBreakerExceptionHandler.Object);

                // Act

                invoker.ExecuteWithBreaker(command, CancellationToken.None);

                // Assert

                mockMetricEvents.Verify(m => m.BreakerSuccessCount(key, command.Name));
            }
            public void WhenRejected_FiresBreakerRejectedMetricEvent()
            {
                // Arrange

                var key = AnyString;

                var mockMetricEvents = new Mock <IMetricEvents>();
                var mockMetrics      = new Mock <ICommandMetrics>();

                var mockBreaker = new Mock <ICircuitBreaker>();

                mockBreaker.SetupGet(m => m.Name).Returns(key);
                mockBreaker.Setup(m => m.IsAllowing()).Returns(false); // We want to reject.
                mockBreaker.SetupGet(m => m.Metrics).Returns(mockMetrics.Object);

                var mockCircuitBreakerFactory = new Mock <ICircuitBreakerFactory>(MockBehavior.Strict);

                mockCircuitBreakerFactory.Setup(m => m.GetCircuitBreaker(It.IsAny <GroupKey>())).Returns(mockBreaker.Object);

                var mockBreakerExceptionHandler = new Mock <IBreakerExceptionHandler>(MockBehavior.Strict);

                mockBreakerExceptionHandler.Setup(m => m.IsExceptionIgnored(It.IsAny <Type>())).Returns(false);

                var command = new NoOpCommand();
                var invoker = new BreakerInvoker(mockCircuitBreakerFactory.Object, mockMetricEvents.Object, mockBreakerExceptionHandler.Object);

                // Act + Assert

                Assert.Throws <CircuitBreakerRejectedException>(() => invoker.ExecuteWithBreaker(command, CancellationToken.None));

                mockMetricEvents.Verify(m => m.RejectedByBreaker(key, command.Name));
            }
Exemple #3
0
        public void ConstructorTest()
        {
            var sut = new NoOpCommand();

            sut.CommandCode.Should().Be(0xff);
            sut.AcknowledgeCode.Should().Be(0xff);
            sut.RequiredBaudRate.Should().Be(250000);
            sut.Timeout.Should().Be(1000);
        }
Exemple #4
0
        public void UnexpectedCode_Test(byte errorCode)
        {
            SetupWrite(ftdiMock, new byte[] { 0xff });
            SetupRead(ftdiMock, new byte[] { errorCode });

            var sut    = new NoOpCommand();
            var result = sut.Execute(ftdiMock.Object);

            result.Should().Be(null);
        }
Exemple #5
0
        public void Successful_BootMode_Scenario_Test()
        {
            SetupWrite(ftdiMock, new byte[] { 0xff });
            SetupRead(ftdiMock, new byte[] { 0x00 });

            var sut    = new NoOpCommand();
            var result = sut.Execute(ftdiMock.Object);

            result.Success.Should().BeFalse();
        }
Exemple #6
0
        public async void NoOpCommand_Execute()
        {
            // ARRANGE
            var command = new NoOpCommand();

            // ACT
            await command.Execute();

            // ASSERT
            Assert.True(true); // no-op must does nothing... :)
        }