internal void Validate(IChaosSettings settings) { ValidationErrors = new List <ChaosSettingError>(); if (settings.PercentageOfChaos < 0 || settings.PercentageOfChaos > 100) { ValidationErrors.Add(new ChaosSettingError(settings.Name, "PercentageOfChaos", "Percentage of chaos must be between 0 and 100")); } if (settings.PercentageOfSlowResponses < 0 || settings.PercentageOfSlowResponses > 100) { ValidationErrors.Add(new ChaosSettingError(settings.Name, "PercentageOfSlowResponses", "Percentage of slow responses must be between 0 and 100")); } if (settings.PercentageOfSlowResponses > 0 && settings.PercentageOfSlowResponses <= 100) { if (settings.MaxResponseDelayTime <= settings.MinResponseDelayTime) { ValidationErrors.Add(new ChaosSettingError(settings.Name, "MaxResponseDelayTime", "Max response time must be greater than min response time")); } } }
private static HttpResponseMessage CreateChanceMissMessageResponseHeaders(Task<HttpResponseMessage> t, IChaosSettings currentChaosSettings) { var taskResult = t.Result; taskResult.Headers.Add(ChaosResponseHeaders.ChanceMiss, string.Empty); taskResult.Headers.Add(ChaosResponseHeaders.ConfigurationName, currentChaosSettings.Name); return taskResult; }
public string GetMediaType(HttpRequestMessage request, IChaosSettings settings) { if (!string.IsNullOrWhiteSpace(settings.ResponseTypeMediaType)) { return settings.ResponseTypeMediaType; } var acceptsMediaType = request.Headers.Accept.FirstOrDefault(); return acceptsMediaType != null ? acceptsMediaType.MediaType : MediaTypeDefault; }
public HttpResponseMessage Build(HttpRequestMessage requestMessage, IChaosSettings chaosSettings) { var chaosResponse = chaosSettings.HttpResponses.TakeRandom(); var response = requestMessage.CreateResponse((HttpStatusCode)chaosResponse.StatusCode); response.ReasonPhrase = "Chaos"; if (chaosResponse.Payloads.Count == 0) { return response; } var chaosPayload = chaosResponse.Payloads.TakeRandom(); response.Content = new StringContent(chaosPayload.Content, Encoding.UTF8, responseMediaType.GetMediaType(requestMessage, chaosSettings)); return response; }
internal void Validate(IChaosSettings settings) { validationErrors = new List<ChaosSettingError>(); if (settings.MaxResponseDelayTime <= settings.MinResponseDelayTime) { validationErrors.Add(new ChaosSettingError(settings.Name, "MaxResponseDelayTime", "Max response time must be greater than min response time")); } if (settings.PercentageOfChaos < 0 || settings.PercentageOfChaos > 100) { validationErrors.Add(new ChaosSettingError(settings.Name, "PercentageOfChaos", "Percentage of chaos must be between 0 and 100")); ; } if (settings.PercentageOfSlowResponses < 0 || settings.PercentageOfSlowResponses > 100) { validationErrors.Add(new ChaosSettingError(settings.Name, "PercentageOfSlowResponses", "Percentage of slow responses must be between 0 and 100")); } }
private static HttpResponseMessage CreateIgnoredUrlMessageResponseHeaders(Task<HttpResponseMessage> t, string ignoredPattern, IChaosSettings currentChaosSettings) { var taskResult = t.Result; taskResult.Headers.Add(ChaosResponseHeaders.IgnoredUrl, ignoredPattern); taskResult.Headers.Add(ChaosResponseHeaders.ConfigurationName, currentChaosSettings.Name); return taskResult; }
private static bool ShouldIgnoreRequest(HttpRequestMessage request, IChaosSettings currentChaosSettings) { if (currentChaosSettings.IgnoreUrlPattern == null) { return false; } return currentChaosSettings.IgnoreUrlPattern.Any(ignoredUrl => request.RequestUri.AbsoluteUri.Contains(ignoredUrl)); }
private static HttpResponseMessage CreateIgnoredUrlMessageResponseHeaders(Task <HttpResponseMessage> t, string ignoredPattern, IChaosSettings currentChaosSettings) { var taskResult = t.Result; taskResult.Headers.Add(ChaosResponseHeaders.IgnoredUrl, ignoredPattern); taskResult.Headers.Add(ChaosResponseHeaders.ConfigurationName, currentChaosSettings.Name); return(taskResult); }
public async Task <HttpResponseMessage> Fiddle(HttpResponseMessage responseMessage, IChaosSettings chaosSettings) { var content = await responseMessage.Content.ReadAsStringAsync(); foreach (var responseFiddle in chaosSettings.ResponseFiddles) { content = content.Replace(responseFiddle.Match, responseFiddle.ReplaceMatchingWith); } var fiddledContent = new StringContent(content, Encoding.UTF8, _responseMediaType.GetMediaType(responseMessage.RequestMessage, chaosSettings)); var cloned = Clone(responseMessage, fiddledContent); return(cloned); }
public ChaosHttpHandler(ILogger <ChaosHttpHandler> logger, IChaosSettings chaosSettings) { _logger = logger; _chaosSettings = chaosSettings.Get(); }