public async Task TestCallbacksAll()
        {
            var callbacks      = new HealthMonitorCallbacks(_logger);
            var healthyCount   = 0;
            var degradedCount  = 0;
            var unhealthyCount = 0;

            callbacks.AddCallback("Check1", HealthMonitorStatus.Healthy, (result) => { healthyCount++; return(Task.CompletedTask); });
            callbacks.AddCallback("Check2", HealthMonitorStatus.Degraded, (result) => { degradedCount++; return(Task.CompletedTask); });
            callbacks.AddCallback("Check3", HealthMonitorStatus.Unhealthy, (result) => { unhealthyCount++; return(Task.CompletedTask); });

            await callbacks.ProcessCallbacks(Data());

            Assert.Equal(1, healthyCount);
            Assert.Equal(1, degradedCount);
            Assert.Equal(1, unhealthyCount);
        }
        public async Task UnhealthyResultWithCallback()
        {
            var opts = Options();

            opts.HealthChecks[0].Uri = "unhealthy";

            var count     = 0;
            var callbacks = new HealthMonitorCallbacks(_callbackLogger);

            callbacks.AddCallback("Check1", HealthMonitorStatus.Unhealthy, (result) => { count++; return(Task.CompletedTask); });

            var data = await RunTest(opts, callbacks);

            Assert.Equal(3, data.MonitorResults.Count);
            Assert.Equal(HealthMonitorStatus.Unhealthy, data.MonitorResults["Check1"].Status);
            Assert.Equal(HealthMonitorStatus.Healthy, data.MonitorResults["Check2"].Status);
            Assert.Equal(HealthMonitorStatus.Healthy, data.MonitorResults["Check3"].Status);
            Assert.Equal(1, count);
        }
        private async Task <HealthMonitorData> RunTest(HealthCheckMonitorOptions options, HealthMonitorCallbacks callbacks = null)
        {
            var data = new HealthMonitorData(options);

            if (callbacks == null)
            {
                callbacks = new HealthMonitorCallbacks(_callbackLogger);
            }


            var service = new MonitorCollectorService(options, data, callbacks, _clientFactory, _collectorLogger);

            using (var cts = new CancellationTokenSource(TimeSpan.FromSeconds(2)))
            {
                await service.StartAsync(cts.Token);

                await Task.Delay(TimeSpan.FromMilliseconds(500));

                await service.StopAsync(cts.Token);
            }

            return(data);
        }