public void Build_PolicyException_Equivalent()
        {
            var expected     = new HealthCheckEntry("TEST", HealthStatus.Unhealthy, "SHOULD MATCH", TimeSpan.FromTicks(1));
            var scheduler    = new TestScheduler();
            var healthPolicy = Substitute.For <IHealthPolicy>();

            healthPolicy.CheckAsync(Arg.Any <CancellationToken>()).Throws(new NullReferenceException(expected.Message));

            var sut      = new HealthPolicyConfiguration(expected.Policy, healthPolicy);
            var observer = scheduler.Start(() => sut.Build(scheduler, Substitute.For <ICollection <IDisposable> >()));

            observer.Messages.AssertEqual(
                OnNext <HealthCheckEntry>(
                    Subscribed + 1,
                    x => x.Policy == expected.Policy &&
                    x.Status == expected.Status &&
                    x.Message == expected.Message &&
                    x.Duration == expected.Duration),
                OnCompleted <HealthCheckEntry>(Subscribed + 1));
        }
        public void Build_WithTimeout()
        {
            var scheduler = new TestScheduler();
            var timeout   = TimeSpan.FromMilliseconds(100);
            var policy    = Substitute.For <IHealthPolicy>();

            policy.CheckAsync(Arg.Any <CancellationToken>())
            .Returns(_ =>
            {
                scheduler.AdvanceBy(TimeSpan.FromSeconds(1).Ticks);
                return(new HealthCheck(HealthStatus.Healthy, "SHOULDN'T BE RECEIVED."));
            });

            var sut      = new HealthPolicyConfiguration("TEST", policy).Timeout(timeout) as HealthPolicyConfiguration;
            var observer = scheduler.CreateObserver <HealthCheckEntry>();

            sut.Build(scheduler, Substitute.For <ICollection <IDisposable> >()).Subscribe(observer).Dispose();

            observer.Messages.AssertEqual(
                OnNext <HealthCheckEntry>(
                    timeout.Ticks + 1,
                    x => x.Duration == timeout && x.Policy == "TEST" && x.Status == HealthStatus.Unhealthy),
                OnCompleted <HealthCheckEntry>(timeout.Ticks + 1));
        }