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 }); }
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); }
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)); }
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)); }
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); }
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); }
public Task <bool> Add(HttpCheck newHttpCheckSettings, CancellationToken cancellationToken) { _collection.Upsert(newHttpCheckSettings.Id, newHttpCheckSettings); return(Task.FromResult(true)); }