Exemplo n.º 1
0
        public CheckResultTests()
        {
            var ck2 = new HttpCheck(2, Env, Srv, TimeSpan.FromMinutes(15), new Uri("http://remotehost"), new List <HttpCheckCondition> {
                Cnd
            }, HttpCheck.HttpMethod.Get);
            var rs3 = new ConditionResultDetail("status", true, "Good but slow");

            var now = DateTimeOffset.UtcNow;

            _checkResultA1      = CreateCheckResult();
            _checkResultA1Clone = new CheckResult(Ck1, now, CheckOutcome.Success, new List <ConditionResultDetail> {
                Rs1
            });
            _checkResultA2 = new CheckResult(Ck1, now.AddHours(1), CheckOutcome.Success, new List <ConditionResultDetail> {
                Rs1
            });
            _checkResultB1 = new CheckResult(ck2, now, CheckOutcome.Success, new List <ConditionResultDetail> {
                Rs1
            });
            _checkResultC1 = new CheckResult(Ck1, now.AddHours(1), CheckOutcome.Fail, new List <ConditionResultDetail> {
                Rs2
            });
            _checkResultD1 = new CheckResult(Ck1, now.AddHours(1), CheckOutcome.Success, new List <ConditionResultDetail> {
                rs3
            });
        }
Exemplo n.º 2
0
        public async Task <bool> Add(HttpCheck newHttpCheckSettings, CancellationToken cancellationToken)
        {
            await _collection.ReplaceOneAsync(
                check => check.Id == newHttpCheckSettings.Id,
                newHttpCheckSettings,
                new ReplaceOptions { IsUpsert = true },
                cancellationToken);

            return(true);
        }
Exemplo n.º 3
0
        public void Given_HttpCheckParameters_When_CreateHttpCheck_Then_TimeoutSameAsTimeoutParameter()
        {
            var sut = new HttpCheck(
                id: Guid.NewGuid(),
                uri: "http://some.com",
                telegramChatId: null,
                timeout: TimeSpan.FromSeconds(30),
                successStatusCodes: new ushort[] { 200 },
                headers: new System.Collections.Generic.Dictionary <string, string>());

            Assert.IsNotNull(sut);
            Assert.IsTrue(sut.Timeout == TimeSpan.FromSeconds(30));
        }
Exemplo n.º 4
0
        public async Task CheckHealthAsync_Unhealthy_ThrowsException()
        {
            var check = new HttpCheck();

            var httpSettings = new HttpRequestSettings()
            {
                HttpMethod = HttpMethod.Get, Uri = new Uri("http://localhost")
            };
            var settings    = new HttpCheckSettings("http", false, 0, null, httpSettings);
            var context     = new HealthCheckContext(settings);
            var httpHandler = new TestHttpMessageHandler();

            httpHandler.Sender   = r => throw new HttpRequestException();
            settings.HttpHandler = httpHandler;

            await Assert.ThrowsAsync <HttpRequestException>(async() => await check.CheckHealthAsync(context, settings));
        }
Exemplo n.º 5
0
        public async Task CheckHealthAsync_UnhealthyStatusCode_CheckFailed()
        {
            var check = new HttpCheck();

            var httpSettings = new HttpRequestSettings()
            {
                HttpMethod = HttpMethod.Get, Uri = new Uri("http://localhost")
            };
            var settings    = new HttpCheckSettings("http", false, 0, null, httpSettings);
            var context     = new HealthCheckContext(settings);
            var httpHandler = new TestHttpMessageHandler();

            httpHandler.Sender   = r => new HttpResponseMessage(HttpStatusCode.BadRequest);
            settings.HttpHandler = httpHandler;

            await check.CheckHealthAsync(context, settings);

            Assert.False(context.HasSucceeded);
        }
Exemplo n.º 6
0
        private static HttpCheck CompleteHttpCheck(
            XPathNavigator crt,
            long id,
            Environment environment,
            Service service,
            TimeSpan interval,
            int?maxContentLength)
        {
            var method         = crt.GetEnumAttributeValue <HttpCheck.HttpMethod>("method");
            var url            = crt.GetUriAttributeValue("url");
            var connectTimeout = crt.GetTimeSpanAttributeValue("connectTimeout");
            var readTimeout    = crt.GetTimeSpanAttributeValue("readTimeout");

            if (method == null)
            {
                throw new InvalidDataException("HttpCall check is missing/has invalid the (HTTP) method");
            }
            if (url == null)
            {
                throw new InvalidDataException("HttpCall check is missing/has invalid its URL");
            }
            if (connectTimeout + readTimeout > interval)
            {
                throw new InvalidDataException("the combined timeouts cannot be larger than the check interval");
            }

            var conditions     = new List <HttpCheckCondition>();
            var conditionsNode = crt.SelectSingleNode("conditions");

            conditionsNode.MoveToFirstChild();
            do
            {
                if (conditionsNode.NodeType != XPathNodeType.Element)
                {
                    continue;
                }
                var conditionsClone  = conditionsNode.Clone();
                var conditionType    = conditionsClone.Name;
                var attributeStrings = new List <KeyValuePair <string, string> >();
                var value            = conditionsClone.Value;
                if (conditionsClone.HasAttributes)
                {
                    if (conditionsClone.MoveToFirstAttribute())
                    {
                        do
                        {
                            attributeStrings.Add(new KeyValuePair <string, string>(conditionsClone.Name, conditionsClone.Value));
                        } while (conditionsClone.MoveToNextAttribute());
                    }
                }
                var condition = GetCondition(conditionType, attributeStrings, value);
                conditions.Add(condition);
            } while (conditionsNode.MoveToNext());

            var roConditions = conditions.AsReadOnly();
            var check        = new HttpCheck(
                id,
                environment,
                service,
                interval,
                url,
                roConditions,
                method.Value,
                connectTimeout,
                readTimeout,
                maxContentLength ?? HttpCheck.DefaultMaxContentLength);

            return(check);
        }
Exemplo n.º 7
0
        public Task <bool> Add(HttpCheck newHttpCheckSettings, CancellationToken cancellationToken)
        {
            _collection.Upsert(newHttpCheckSettings.Id, newHttpCheckSettings);

            return(Task.FromResult(true));
        }