public void Invoke_HandlesExceptions_ReturnsExpectedHealth()
        {
            var opts         = new HealthEndpointOptions();
            var contributors = new List <IHealthContributor>()
            {
                new TestContrib("h1"), new TestContrib("h2", true), new TestContrib("h3")
            };
            var ep = new HealthEndpoint(opts, new DefaultHealthAggregator(), contributors);

            var info = ep.Invoke(null);

            foreach (var contrib in contributors)
            {
                TestContrib tc = (TestContrib)contrib;
                if (tc.Throws)
                {
                    Assert.False(tc.Called);
                }
                else
                {
                    Assert.True(tc.Called);
                }
            }

            Assert.Equal(HealthStatus.UP, info.Status);
        }
        public void Invoke_NoContributors_ReturnsExpectedHealth()
        {
            var opts         = new HealthEndpointOptions();
            var contributors = new List <IHealthContributor>();
            var agg          = new DefaultHealthAggregator();
            var ep           = new HealthEndpoint(opts, agg, contributors, GetLogger <HealthEndpoint>());

            var health = ep.Invoke(null);

            Assert.NotNull(health);
            Assert.Equal(HealthStatus.UNKNOWN, health.Status);
        }
        public void Invoke_CallsAllContributors()
        {
            var opts         = new HealthEndpointOptions();
            var contributors = new List <IHealthContributor>()
            {
                new TestContrib("h1"), new TestContrib("h2"), new TestContrib("h3")
            };
            var ep = new HealthEndpoint(opts, new DefaultHealthAggregator(), contributors);

            var info = ep.Invoke(null);

            foreach (var contrib in contributors)
            {
                TestContrib tc = (TestContrib)contrib;
                Assert.True(tc.Called);
            }
        }
        public void InvokeWithInvalidGroupReturnsAllContributors()
        {
            // arrange
            var opts     = new HealthEndpointOptions();
            var contribs = new List <IHealthContributor>()
            {
                new DiskSpaceContributor(), new OutOfSserviceContributor(), new UnknownContributor(), new UpContributor()
            };
            var ep      = new HealthEndpoint(opts, new DefaultHealthAggregator(), contribs);
            var context = Substitute.For <ISecurityContext>();

            context.GetRequestComponents().Returns(new string[] { "health", "iNvAlId" });

            // act
            var result = ep.Invoke(context);

            // assert
            Assert.Equal(HealthStatus.OUT_OF_SERVICE, result.Status);
            Assert.True(result.Details.Keys.Count == 4);
            Assert.True(result.Groups.Count() == 2);
        }
        public void InvokeWithReadinessGroupReturnsGroupResults()
        {
            // arrange
            var opts            = new HealthEndpointOptions();
            var appAvailability = new ApplicationAvailability();
            var contribs        = new List <IHealthContributor>()
            {
                new UnknownContributor(), new UpContributor(), new ReadinessHealthContributor(appAvailability)
            };
            var ep      = new HealthEndpoint(opts, new DefaultHealthAggregator(), contribs);
            var context = Substitute.For <ISecurityContext>();

            context.GetRequestComponents().Returns(new string[] { "actuator", "health", "readiness" });
            appAvailability.SetAvailabilityState(appAvailability.ReadinessKey, ReadinessState.AcceptingTraffic, null);

            // act
            var result = ep.Invoke(context);

            // assert
            Assert.Equal(HealthStatus.UP, result.Status);
            Assert.True(result.Details.Keys.Count == 1);
            Assert.True(result.Groups.Count() == 2);
        }
        public void InvokeWithLivenessGroupReturnsGroupResults()
        {
            // arrange
            var opts            = new HealthEndpointOptions();
            var appAvailability = new ApplicationAvailability();
            var contribs        = new List <IHealthContributor>()
            {
                new DiskSpaceContributor(), new LivenessHealthContributor(appAvailability)
            };
            var ep      = new HealthEndpoint(opts, new DefaultHealthAggregator(), contribs);
            var context = Substitute.For <ISecurityContext>();

            context.GetRequestComponents().Returns(new string[] { "cloudfoundryapplication", "health", "liVeness" });
            appAvailability.SetAvailabilityState(appAvailability.LivenessKey, LivenessState.Correct, null);

            // act
            var result = ep.Invoke(context);

            // assert
            Assert.Equal(HealthStatus.UP, result.Status);
            Assert.True(result.Details.Keys.Count == 1);
            Assert.True(result.Groups.Count() == 2);
        }