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);
        }
Example #9
0
        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();
 }