Ejemplo n.º 1
0
        public static HealthCheckBuilder AddValueTaskCheck(this HealthCheckBuilder builder, string name,
                                                           Func <CancellationToken, ValueTask <IHealthCheckResult> > check, TimeSpan cacheDuration)
        {
            Guard.ArgumentNotNull(nameof(builder), builder);

            return(builder.AddCheck(name, HealthCheck.FromValueTaskCheck(check), cacheDuration));
        }
Ejemplo n.º 2
0
        public static HealthCheckBuilder AddCheck(this HealthCheckBuilder builder, string name,
                                                  Func <CancellationToken, IHealthCheckResult> check)
        {
            Guard.ArgumentNotNull(nameof(builder), builder);

            return(builder.AddCheck(name, HealthCheck.FromCheck(check), builder.DefaultCacheDuration));
        }
Ejemplo n.º 3
0
        public static HealthCheckBuilder AddValueTaskCheck(this HealthCheckBuilder builder, string name,
                                                           Func <ValueTask <IHealthCheckResult> > check)
        {
            Guard.ArgumentNotNull(nameof(builder), builder);

            return(builder.AddCheck(name, HealthCheck.FromValueTaskCheck(check), builder.DefaultCacheDuration));
        }
Ejemplo n.º 4
0
            public async void MultipleCallersDuringRefreshPeriodOnlyResultInASingleValue()
            {
                var checkResult1 = Substitute.For <IHealthCheckResult>();
                var checkResult2 = Substitute.For <IHealthCheckResult>();
                var check        = Substitute.For <Func <CancellationToken, ValueTask <IHealthCheckResult> > >();
                var waiter       = new TaskCompletionSource <int>();
                var firstTask    = new ValueTask <IHealthCheckResult>(((Func <Task <IHealthCheckResult> >)(async() =>
                {
                    await waiter.Task;
                    return(checkResult1);
                }))());
                var secondTask = new ValueTask <IHealthCheckResult>(checkResult2);

                check(default(CancellationToken)).ReturnsForAnyArgs(firstTask, secondTask);
                var cachedCheck = new TestableCachedHealthCheck(check: HealthCheck.FromValueTaskCheck(check), cacheDuration: TimeSpan.FromSeconds(1));

                var task1 = cachedCheck.RunAsync(_serviceProvider);
                var task2 = cachedCheck.RunAsync(_serviceProvider);

                waiter.SetResult(0);
                var result1 = await task1;
                var result2 = await task2;

                Assert.Same(checkResult1, result1);
                Assert.Same(checkResult1, result2);
            }
Ejemplo n.º 5
0
        public static HealthCheckBuilder AddCheck(this HealthCheckBuilder builder, string name, Func <IHealthCheckResult> check, TimeSpan cacheDuration)
        {
            Guard.ArgumentNotNull(nameof(builder), builder);

            builder.AddCheck(name, HealthCheck.FromCheck(check, cacheDuration));
            return(builder);
        }
Ejemplo n.º 6
0
            public async void CheckDoesNotThrow_ReturnsCheckResult()
            {
                var checkResult = HealthCheckResult.Healthy("Healthy Check");
                var cachedCheck = new TestableCachedHealthCheck(check: HealthCheck.FromCheck(() => checkResult));

                var result = await cachedCheck.RunAsync(_serviceProvider);

                Assert.Same(checkResult, result);
            }
Ejemplo n.º 7
0
            public async void FirstCallReadsCheck()
            {
                var checkResult = Substitute.For <IHealthCheckResult>();
                var check       = Substitute.For <Func <CancellationToken, ValueTask <IHealthCheckResult> > >();

                check(default(CancellationToken)).ReturnsForAnyArgs(new ValueTask <IHealthCheckResult>(checkResult));
                var cachedCheck = new TestableCachedHealthCheck(check: HealthCheck.FromValueTaskCheck(check));

                var result = await cachedCheck.RunAsync(_serviceProvider);

                Assert.Same(checkResult, result);
            }
Ejemplo n.º 8
0
            public async void CancellationRequested_ReturnsUnhealthyCheck()
            {
                var checkResult = HealthCheckResult.Healthy("Happy check");
                var cachedCheck = new TestableCachedHealthCheck(check: HealthCheck.FromCheck(token => { token.ThrowIfCancellationRequested(); return(checkResult); }));
                var cts         = new CancellationTokenSource();

                cts.Cancel();

                var result = await cachedCheck.RunAsync(_serviceProvider, cts.Token);

                Assert.Equal(CheckStatus.Unhealthy, result.CheckStatus);
                Assert.Equal("The health check operation timed out", result.Description);
                Assert.Empty(result.Data);
            }
Ejemplo n.º 9
0
            public async void SecondCallUsesCachedValue()
            {
                var checkResult1 = Substitute.For <IHealthCheckResult>();
                var checkResult2 = Substitute.For <IHealthCheckResult>();
                var check        = Substitute.For <Func <CancellationToken, ValueTask <IHealthCheckResult> > >();

                check(default(CancellationToken)).ReturnsForAnyArgs(new ValueTask <IHealthCheckResult>(checkResult1), new ValueTask <IHealthCheckResult>(checkResult2));
                var cachedCheck = new TestableCachedHealthCheck(check: HealthCheck.FromValueTaskCheck(check), cacheDuration: TimeSpan.FromSeconds(1));

                var result1 = await cachedCheck.RunAsync(_serviceProvider);

                var result2 = await cachedCheck.RunAsync(_serviceProvider);

                Assert.Same(checkResult1, result1);
                Assert.Same(checkResult1, result2);
            }
Ejemplo n.º 10
0
            public async void CachedValueRefreshedAfterTimeout()
            {
                var checkResult1 = Substitute.For <IHealthCheckResult>();
                var checkResult2 = Substitute.For <IHealthCheckResult>();
                var check        = Substitute.For <Func <CancellationToken, ValueTask <IHealthCheckResult> > >();

                check(default(CancellationToken)).ReturnsForAnyArgs(new ValueTask <IHealthCheckResult>(checkResult1), new ValueTask <IHealthCheckResult>(checkResult2));
                var cachedCheck = new TestableCachedHealthCheck(check: HealthCheck.FromValueTaskCheck(check), cacheDuration: TimeSpan.FromSeconds(1));
                var now         = DateTimeOffset.UtcNow;

                cachedCheck.SetUtcNow(now);
                var result1 = await cachedCheck.RunAsync(_serviceProvider);

                cachedCheck.SetUtcNow(now + TimeSpan.FromSeconds(1));
                var result2 = await cachedCheck.RunAsync(_serviceProvider);

                Assert.Same(checkResult1, result1);
                Assert.Same(checkResult2, result2);
            }