mirror of
				https://github.com/nsnail/Ocelot.git
				synced 2025-10-31 15:45:28 +08:00 
			
		
		
		
	Refactor qos as options
This commit is contained in:
		| @@ -33,12 +33,11 @@ namespace Ocelot.Configuration.Builder | ||||
|         private string _downstreamScheme; | ||||
|         private string _downstreamHost; | ||||
|         private int _dsPort; | ||||
|         private int _exceptionsAllowedBeforeBreaking; | ||||
|         private int _durationOfBreak; | ||||
|         private int _timeoutValue; | ||||
|         private string _loadBalancer; | ||||
|         private string _serviceProviderHost; | ||||
|         private int _serviceProviderPort; | ||||
|         private bool _useQos; | ||||
|         private QoSOptions _qosOptions; | ||||
|  | ||||
|  | ||||
|         public ReRouteBuilder() | ||||
| @@ -206,23 +205,18 @@ namespace Ocelot.Configuration.Builder | ||||
|             return this; | ||||
|         } | ||||
|  | ||||
|         public ReRouteBuilder WithExceptionsAllowedBeforeBreaking(int exceptionsAllowedBeforeBreaking) | ||||
|         public ReRouteBuilder WithIsQos(bool input) | ||||
|         { | ||||
|             _exceptionsAllowedBeforeBreaking = exceptionsAllowedBeforeBreaking; | ||||
|             _useQos = input; | ||||
|             return this; | ||||
|         } | ||||
|  | ||||
|         public ReRouteBuilder WithDurationOfBreak(int durationOfBreak) | ||||
|         public ReRouteBuilder WithQosOptions(QoSOptions input) | ||||
|         { | ||||
|             _durationOfBreak = durationOfBreak; | ||||
|             return this; | ||||
|         } | ||||
|  | ||||
|         public ReRouteBuilder WithTimeoutValue(int timeoutValue) | ||||
|         { | ||||
|             _timeoutValue = timeoutValue; | ||||
|             _qosOptions = input; | ||||
|             return this; | ||||
|         } | ||||
|         | ||||
|  | ||||
|         public ReRouteBuilder WithLoadBalancerKey(string loadBalancerKey) | ||||
|         { | ||||
| @@ -250,7 +244,7 @@ namespace Ocelot.Configuration.Builder | ||||
|                 _isAuthorised, _claimToQueries, _requestIdHeaderKey, _isCached, _fileCacheOptions, _downstreamScheme, _loadBalancer, | ||||
|                 _downstreamHost, _dsPort, _loadBalancerKey, new ServiceProviderConfiguraion(_serviceName, _downstreamHost, _dsPort, _useServiceDiscovery, | ||||
|                 _serviceDiscoveryProvider, _serviceProviderHost, _serviceProviderPort), | ||||
|                  _exceptionsAllowedBeforeBreaking,_durationOfBreak, _timeoutValue); | ||||
|                 _useQos,_qosOptions); | ||||
|  | ||||
|         } | ||||
|     } | ||||
|   | ||||
| @@ -96,6 +96,8 @@ namespace Ocelot.Configuration.Creator | ||||
|  | ||||
|             var isCached = fileReRoute.FileCacheOptions.TtlSeconds > 0; | ||||
|  | ||||
|             var isQos = fileReRoute.QoSOptions.ExceptionsAllowedBeforeBreaking > 0 && fileReRoute.QoSOptions.TimeoutValue >0; | ||||
|  | ||||
|             var requestIdKey = globalRequestIdConfiguration | ||||
|                 ? globalConfiguration.RequestIdKey | ||||
|                 : fileReRoute.RequestIdKey; | ||||
| @@ -135,8 +137,8 @@ namespace Ocelot.Configuration.Creator | ||||
|                    requestIdKey, isCached, new CacheOptions(fileReRoute.FileCacheOptions.TtlSeconds) | ||||
|                    , fileReRoute.DownstreamScheme, | ||||
|                    fileReRoute.LoadBalancer, fileReRoute.DownstreamHost, fileReRoute.DownstreamPort, loadBalancerKey, | ||||
|                    serviceProviderConfiguration, fileReRoute.ExceptionsAllowedBeforeBreaking, | ||||
|                     fileReRoute.DurationOfBreak, fileReRoute.TimeoutValue); | ||||
|                    serviceProviderConfiguration, isQos,  | ||||
|                    new QoSOptions(fileReRoute.QoSOptions.ExceptionsAllowedBeforeBreaking, fileReRoute.QoSOptions.DurationOfBreak, fileReRoute.QoSOptions.TimeoutValue)); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
| @@ -148,8 +150,8 @@ namespace Ocelot.Configuration.Creator | ||||
|                     requestIdKey, isCached, new CacheOptions(fileReRoute.FileCacheOptions.TtlSeconds), | ||||
|                     fileReRoute.DownstreamScheme, | ||||
|                     fileReRoute.LoadBalancer, fileReRoute.DownstreamHost, fileReRoute.DownstreamPort, loadBalancerKey, | ||||
|                     serviceProviderConfiguration, fileReRoute.ExceptionsAllowedBeforeBreaking, | ||||
|                     fileReRoute.DurationOfBreak, fileReRoute.TimeoutValue); | ||||
|                     serviceProviderConfiguration, isQos, | ||||
|                     new QoSOptions(fileReRoute.QoSOptions.ExceptionsAllowedBeforeBreaking, fileReRoute.QoSOptions.DurationOfBreak, fileReRoute.QoSOptions.TimeoutValue)); | ||||
|             } | ||||
|        | ||||
|             var loadBalancer = await _loadBalanceFactory.Get(reRoute); | ||||
|   | ||||
							
								
								
									
										16
									
								
								src/Ocelot/Configuration/File/FileQoSOptions.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								src/Ocelot/Configuration/File/FileQoSOptions.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using System.Linq; | ||||
| using System.Threading.Tasks; | ||||
|  | ||||
| namespace Ocelot.Configuration.File | ||||
| { | ||||
|     public class FileQoSOptions | ||||
|     { | ||||
|         public int ExceptionsAllowedBeforeBreaking { get; set; } | ||||
|  | ||||
|         public int DurationOfBreak { get; set; } | ||||
|  | ||||
|         public int TimeoutValue { get; set; } | ||||
|     } | ||||
| } | ||||
| @@ -12,6 +12,7 @@ namespace Ocelot.Configuration.File | ||||
|             AddQueriesToRequest = new Dictionary<string, string>(); | ||||
|             AuthenticationOptions = new FileAuthenticationOptions(); | ||||
|             FileCacheOptions = new FileCacheOptions(); | ||||
|             QoSOptions = new FileQoSOptions(); | ||||
|         } | ||||
|  | ||||
|         public string DownstreamPathTemplate { get; set; } | ||||
| @@ -29,9 +30,7 @@ namespace Ocelot.Configuration.File | ||||
|         public string DownstreamScheme {get;set;} | ||||
|         public string DownstreamHost {get;set;} | ||||
|         public int DownstreamPort { get; set; } | ||||
|         public int ExceptionsAllowedBeforeBreaking { get; set; } | ||||
|         public int DurationOfBreak { get; set; } | ||||
|         public int TimeoutValue { get; set; } | ||||
|         public FileQoSOptions QoSOptions { get; set; } | ||||
|         public string LoadBalancer {get;set;} | ||||
|     } | ||||
| } | ||||
| @@ -4,17 +4,18 @@ using System.Collections.Generic; | ||||
| using System.Linq; | ||||
| using System.Threading.Tasks; | ||||
| 
 | ||||
| namespace Ocelot.Values | ||||
| namespace Ocelot.Configuration | ||||
| { | ||||
|     public class QoS | ||||
|     public class QoSOptions | ||||
|     { | ||||
|         public QoS(int exceptionsAllowedBeforeBreaking, int durationofBreak, int timeoutValue, TimeoutStrategy timeoutStrategy = TimeoutStrategy.Pessimistic) | ||||
|         public QoSOptions(int exceptionsAllowedBeforeBreaking, int durationofBreak, int timeoutValue, TimeoutStrategy timeoutStrategy = TimeoutStrategy.Pessimistic) | ||||
|         { | ||||
|             ExceptionsAllowedBeforeBreaking = exceptionsAllowedBeforeBreaking; | ||||
|             DurationOfBreak = TimeSpan.FromMilliseconds(durationofBreak); | ||||
|             TimeoutValue = TimeSpan.FromMilliseconds(timeoutValue); | ||||
|             TimeoutStrategy = timeoutStrategy; | ||||
|         } | ||||
|           | ||||
| 
 | ||||
|         public int ExceptionsAllowedBeforeBreaking { get; private set; } | ||||
| 
 | ||||
| @@ -23,5 +24,6 @@ namespace Ocelot.Values | ||||
|         public TimeSpan TimeoutValue { get; private set; } | ||||
| 
 | ||||
|         public TimeoutStrategy TimeoutStrategy { get; private set; } | ||||
| 
 | ||||
|     } | ||||
| } | ||||
| @@ -17,7 +17,7 @@ namespace Ocelot.Configuration | ||||
|             string requestIdKey, bool isCached, CacheOptions fileCacheOptions,  | ||||
|             string downstreamScheme, string loadBalancer, string downstreamHost,  | ||||
|             int downstreamPort, string loadBalancerKey, ServiceProviderConfiguraion serviceProviderConfiguraion, | ||||
|             int exceptionsAllowedBeforeBreaking =3, int durationofBreak =8, int timeoutValue = 5000) | ||||
|             bool isQos,QoSOptions qos) | ||||
|         { | ||||
|             LoadBalancerKey = loadBalancerKey; | ||||
|             ServiceProviderConfiguraion = serviceProviderConfiguraion; | ||||
| @@ -42,9 +42,8 @@ namespace Ocelot.Configuration | ||||
|             ClaimsToHeaders = configurationHeaderExtractorProperties  | ||||
|                 ?? new List<ClaimToThing>(); | ||||
|                 DownstreamScheme = downstreamScheme; | ||||
|             ExceptionsAllowedBeforeBreaking = exceptionsAllowedBeforeBreaking; | ||||
|             DurationOfBreak = durationofBreak; | ||||
|             TimeoutValue = timeoutValue; | ||||
|             IsQos = isQos; | ||||
|             QosOptions = qos; | ||||
|         } | ||||
|  | ||||
|         public string LoadBalancerKey {get;private set;} | ||||
| @@ -63,9 +62,8 @@ namespace Ocelot.Configuration | ||||
|         public bool IsCached { get; private set; } | ||||
|         public CacheOptions FileCacheOptions { get; private set; } | ||||
|         public string DownstreamScheme {get;private set;} | ||||
|         public int ExceptionsAllowedBeforeBreaking { get; private set; } | ||||
|         public int DurationOfBreak { get; private set; } | ||||
|         public int TimeoutValue { get; private set; } | ||||
|         public bool IsQos { get; private set; } | ||||
|         public QoSOptions QosOptions { get; private set; } | ||||
|         public string LoadBalancer {get;private set;} | ||||
|         public string DownstreamHost { get; private set; } | ||||
|         public int DownstreamPort { get; private set; } | ||||
|   | ||||
| @@ -2,6 +2,7 @@ | ||||
| using System.Threading.Tasks; | ||||
| using Microsoft.AspNetCore.Http; | ||||
| using Ocelot.Responses; | ||||
| using Ocelot.Configuration; | ||||
|  | ||||
| namespace Ocelot.Request.Builder | ||||
| { | ||||
| @@ -16,7 +17,8 @@ namespace Ocelot.Request.Builder | ||||
|             QueryString queryString,  | ||||
|             string contentType,  | ||||
|             RequestId.RequestId requestId, | ||||
|             Values.QoS qos) | ||||
|             bool isQos, | ||||
|             QoSOptions qos) | ||||
|         { | ||||
|             var request = await new RequestBuilder() | ||||
|                 .WithHttpMethod(httpMethod) | ||||
| @@ -27,6 +29,7 @@ namespace Ocelot.Request.Builder | ||||
|                 .WithHeaders(headers) | ||||
|                 .WithRequestId(requestId) | ||||
|                 .WithCookies(cookies) | ||||
|                 .WithIsQos(isQos) | ||||
|                 .WithQos(qos) | ||||
|                 .Build(); | ||||
|  | ||||
|   | ||||
| @@ -2,6 +2,7 @@ | ||||
| using System.Threading.Tasks; | ||||
| using Microsoft.AspNetCore.Http; | ||||
| using Ocelot.Responses; | ||||
| using Ocelot.Configuration; | ||||
|  | ||||
| namespace Ocelot.Request.Builder | ||||
| { | ||||
| @@ -13,8 +14,9 @@ namespace Ocelot.Request.Builder | ||||
|             IHeaderDictionary headers, | ||||
|             IRequestCookieCollection cookies, | ||||
|             QueryString queryString, | ||||
|             string contentType,  | ||||
|             string contentType, | ||||
|             RequestId.RequestId requestId, | ||||
|             Values.QoS qos); | ||||
|             bool isQos, | ||||
|             QoSOptions qos); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -8,6 +8,7 @@ using System.Net.Http.Headers; | ||||
| using System.Threading.Tasks; | ||||
| using Microsoft.AspNetCore.Http; | ||||
| using Microsoft.Extensions.Primitives; | ||||
| using Ocelot.Configuration; | ||||
|  | ||||
| namespace Ocelot.Request.Builder | ||||
| { | ||||
| @@ -22,7 +23,8 @@ namespace Ocelot.Request.Builder | ||||
|         private RequestId.RequestId _requestId; | ||||
|         private IRequestCookieCollection _cookies; | ||||
|         private readonly string[] _unsupportedHeaders = {"host"}; | ||||
|         private Values.QoS _qos; | ||||
|         private bool _isQos; | ||||
|         private QoSOptions _qos; | ||||
|  | ||||
|         public RequestBuilder WithHttpMethod(string httpMethod) | ||||
|         { | ||||
| @@ -72,7 +74,13 @@ namespace Ocelot.Request.Builder | ||||
|             return this; | ||||
|         } | ||||
|  | ||||
|         public RequestBuilder WithQos(Values.QoS qos) | ||||
|         public RequestBuilder WithIsQos(bool isqos) | ||||
|         { | ||||
|             _isQos = isqos; | ||||
|             return this; | ||||
|         } | ||||
|  | ||||
|         public RequestBuilder WithQos(QoSOptions qos) | ||||
|         { | ||||
|             _qos = qos; | ||||
|             return this; | ||||
| @@ -97,7 +105,7 @@ namespace Ocelot.Request.Builder | ||||
|  | ||||
|             var cookieContainer = CreateCookieContainer(uri); | ||||
|  | ||||
|             return new Request(httpRequestMessage, cookieContainer, _qos); | ||||
|             return new Request(httpRequestMessage, cookieContainer,_isQos,_qos); | ||||
|         } | ||||
|  | ||||
|         private Uri CreateUri() | ||||
|   | ||||
| @@ -33,7 +33,7 @@ namespace Ocelot.Request.Middleware | ||||
|                 .Build(context.Request.Method, DownstreamUrl, context.Request.Body, | ||||
|                     context.Request.Headers, context.Request.Cookies, context.Request.QueryString, | ||||
|                     context.Request.ContentType, new RequestId.RequestId(DownstreamRoute?.ReRoute?.RequestIdKey, context.TraceIdentifier), | ||||
|                     new Values.QoS(DownstreamRoute.ReRoute.ExceptionsAllowedBeforeBreaking, DownstreamRoute.ReRoute.DurationOfBreak, DownstreamRoute.ReRoute.TimeoutValue)); | ||||
|                     DownstreamRoute.ReRoute.IsQos,DownstreamRoute.ReRoute.QosOptions); | ||||
|  | ||||
|             if (buildResult.IsError) | ||||
|             { | ||||
|   | ||||
| @@ -1,4 +1,5 @@ | ||||
| using Ocelot.Values; | ||||
| using Ocelot.Configuration; | ||||
| using Ocelot.Values; | ||||
| using System.Net; | ||||
| using System.Net.Http; | ||||
|  | ||||
| @@ -6,15 +7,17 @@ namespace Ocelot.Request | ||||
| { | ||||
|     public class Request | ||||
|     { | ||||
|         public Request(HttpRequestMessage httpRequestMessage, CookieContainer cookieContainer, QoS qos) | ||||
|         public Request(HttpRequestMessage httpRequestMessage, CookieContainer cookieContainer,bool isQos, QoSOptions qos) | ||||
|         { | ||||
|             HttpRequestMessage = httpRequestMessage; | ||||
|             CookieContainer = cookieContainer; | ||||
|             IsQos = isQos; | ||||
|             Qos = qos; | ||||
|         } | ||||
|  | ||||
|         public HttpRequestMessage HttpRequestMessage { get; private set; } | ||||
|         public CookieContainer CookieContainer { get; private set; } | ||||
|         public QoS Qos { get; private set; } | ||||
|         public bool IsQos { get; private set; } | ||||
|         public QoSOptions Qos { get; private set; } | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -1,4 +1,5 @@ | ||||
| using Ocelot.Logging; | ||||
| using Ocelot.Configuration; | ||||
| using Ocelot.Logging; | ||||
| using Ocelot.Values; | ||||
| using Polly.Timeout; | ||||
| using System; | ||||
| @@ -13,15 +14,15 @@ namespace Ocelot.Requester | ||||
|     { | ||||
|         private readonly Dictionary<int, Func<DelegatingHandler>> handlers = new Dictionary<int, Func<DelegatingHandler>>(); | ||||
|  | ||||
|         public HttpClientBuilder WithCircuitBreaker(QoS qos, IOcelotLogger logger, HttpMessageHandler innerHandler) | ||||
|         public HttpClientBuilder WithCircuitBreaker(QoSOptions qos, IOcelotLogger logger, HttpMessageHandler innerHandler) | ||||
|         { | ||||
|             handlers.Add(5000, () => new CircuitBreakingDelegatingHandler(qos.ExceptionsAllowedBeforeBreaking, qos.DurationOfBreak, qos.TimeoutValue, qos.TimeoutStrategy, logger, innerHandler)); | ||||
|             return this; | ||||
|         } | ||||
|  | ||||
|         internal HttpClient Build() | ||||
|         internal HttpClient Build(HttpMessageHandler innerHandler) | ||||
|         { | ||||
|             return handlers.Any() ? new HttpClient(CreateHttpMessageHandler()) : new HttpClient(); | ||||
|             return handlers.Any() ? new HttpClient(CreateHttpMessageHandler()) : new HttpClient(innerHandler); | ||||
|         } | ||||
|  | ||||
|         private HttpMessageHandler CreateHttpMessageHandler() | ||||
|   | ||||
| @@ -23,8 +23,11 @@ namespace Ocelot.Requester | ||||
|  | ||||
|             using (var handler = new HttpClientHandler { CookieContainer = request.CookieContainer }) | ||||
|             { | ||||
|                 builder.WithCircuitBreaker(request.Qos, _logger, handler);                | ||||
|                 using (var httpClient = builder.Build()) | ||||
|                 if (request.IsQos) | ||||
|                 { | ||||
|                     builder.WithCircuitBreaker(request.Qos, _logger, handler); | ||||
|                 }            | ||||
|                 using (var httpClient = builder.Build(handler)) | ||||
|                 { | ||||
|                     try | ||||
|                     { | ||||
|   | ||||
| @@ -125,9 +125,6 @@ namespace Ocelot.AcceptanceTests | ||||
|                             DownstreamScheme = _downstreamServiceScheme, | ||||
|                             UpstreamTemplate = "/", | ||||
|                             UpstreamHttpMethod = "Get", | ||||
|                             ExceptionsAllowedBeforeBreaking = 3, | ||||
|                             DurationOfBreak =5, | ||||
|                             TimeoutValue = 5000, | ||||
|                             AuthenticationOptions = new FileAuthenticationOptions | ||||
|                             { | ||||
|                                 AdditionalScopes =  new List<string>(), | ||||
| @@ -168,9 +165,7 @@ namespace Ocelot.AcceptanceTests | ||||
|                             DownstreamScheme = _downstreamServiceScheme, | ||||
|                             UpstreamTemplate = "/", | ||||
|                             UpstreamHttpMethod = "Post", | ||||
|                             ExceptionsAllowedBeforeBreaking = 3, | ||||
|                             DurationOfBreak =5, | ||||
|                             TimeoutValue = 5000, | ||||
|                              | ||||
|                             AuthenticationOptions = new FileAuthenticationOptions | ||||
|                             { | ||||
|                                 AdditionalScopes =  new List<string>(), | ||||
| @@ -211,10 +206,7 @@ namespace Ocelot.AcceptanceTests | ||||
|                             DownstreamScheme = _downstreamServiceScheme, | ||||
|                             UpstreamTemplate = "/", | ||||
|                             UpstreamHttpMethod = "Post", | ||||
|                             ExceptionsAllowedBeforeBreaking = 3, | ||||
|                             DurationOfBreak =5, | ||||
|                             TimeoutValue = 5000, | ||||
|                             AuthenticationOptions = new FileAuthenticationOptions | ||||
|                              AuthenticationOptions = new FileAuthenticationOptions | ||||
|                             { | ||||
|                                 AdditionalScopes = new List<string>(), | ||||
|                                 Provider = "IdentityServer", | ||||
|   | ||||
| @@ -43,9 +43,6 @@ namespace Ocelot.AcceptanceTests | ||||
|                             DownstreamHost = "localhost", | ||||
|                             UpstreamTemplate = "/", | ||||
|                             UpstreamHttpMethod = "Get", | ||||
|                             ExceptionsAllowedBeforeBreaking = 3, | ||||
|                             DurationOfBreak =5, | ||||
|                             TimeoutValue = 5000, | ||||
|                             AuthenticationOptions = new FileAuthenticationOptions | ||||
|                             { | ||||
|                                 AdditionalScopes =  new List<string>(), | ||||
|   | ||||
| @@ -37,9 +37,6 @@ namespace Ocelot.AcceptanceTests | ||||
|                             DownstreamHost = "localhost", | ||||
|                             UpstreamTemplate = "/", | ||||
|                             UpstreamHttpMethod = "Get", | ||||
|                             ExceptionsAllowedBeforeBreaking = 3, | ||||
|                             DurationOfBreak =5, | ||||
|                             TimeoutValue = 5000, | ||||
|                             FileCacheOptions = new FileCacheOptions | ||||
|                             { | ||||
|                                 TtlSeconds = 100 | ||||
| @@ -76,9 +73,6 @@ namespace Ocelot.AcceptanceTests | ||||
|                             DownstreamHost = "localhost", | ||||
|                             UpstreamTemplate = "/", | ||||
|                             UpstreamHttpMethod = "Get", | ||||
|                             ExceptionsAllowedBeforeBreaking = 3, | ||||
|                             DurationOfBreak =5, | ||||
|                             TimeoutValue = 5000, | ||||
|                             FileCacheOptions = new FileCacheOptions | ||||
|                             { | ||||
|                                 TtlSeconds = 1 | ||||
|   | ||||
| @@ -36,9 +36,6 @@ namespace Ocelot.AcceptanceTests | ||||
|                             DownstreamHost = "localhost", | ||||
|                             UpstreamTemplate = "/products/{productId}", | ||||
|                             UpstreamHttpMethod = "Get", | ||||
|                             ExceptionsAllowedBeforeBreaking = 3, | ||||
|                             DurationOfBreak =5, | ||||
|                             TimeoutValue = 5000 | ||||
|                         } | ||||
|                     } | ||||
|             }; | ||||
| @@ -67,9 +64,6 @@ namespace Ocelot.AcceptanceTests | ||||
|                             UpstreamTemplate = "/products/{productId}", | ||||
|                             UpstreamHttpMethod = "Get", | ||||
|                             ReRouteIsCaseSensitive = false, | ||||
|                             ExceptionsAllowedBeforeBreaking = 3, | ||||
|                             DurationOfBreak =5, | ||||
|                             TimeoutValue = 5000, | ||||
|                         } | ||||
|                     } | ||||
|             }; | ||||
| @@ -98,9 +92,6 @@ namespace Ocelot.AcceptanceTests | ||||
|                             UpstreamTemplate = "/products/{productId}", | ||||
|                             UpstreamHttpMethod = "Get", | ||||
|                             ReRouteIsCaseSensitive = true, | ||||
|                             ExceptionsAllowedBeforeBreaking = 3, | ||||
|                             DurationOfBreak =5, | ||||
|                             TimeoutValue = 5000 | ||||
|                         } | ||||
|                     } | ||||
|             }; | ||||
| @@ -129,9 +120,6 @@ namespace Ocelot.AcceptanceTests | ||||
|                             UpstreamTemplate = "/PRODUCTS/{productId}", | ||||
|                             UpstreamHttpMethod = "Get", | ||||
|                             ReRouteIsCaseSensitive = true, | ||||
|                             ExceptionsAllowedBeforeBreaking = 3, | ||||
|                             DurationOfBreak =5, | ||||
|                             TimeoutValue = 5000, | ||||
|                         } | ||||
|                     } | ||||
|             }; | ||||
| @@ -160,9 +148,6 @@ namespace Ocelot.AcceptanceTests | ||||
|                             UpstreamTemplate = "/products/{productId}", | ||||
|                             UpstreamHttpMethod = "Get", | ||||
|                             ReRouteIsCaseSensitive = true, | ||||
|                             ExceptionsAllowedBeforeBreaking = 3, | ||||
|                             DurationOfBreak =5, | ||||
|                             TimeoutValue = 5000, | ||||
|                         } | ||||
|                     } | ||||
|             }; | ||||
| @@ -191,9 +176,6 @@ namespace Ocelot.AcceptanceTests | ||||
|                             UpstreamTemplate = "/PRODUCTS/{productId}", | ||||
|                             UpstreamHttpMethod = "Get", | ||||
|                             ReRouteIsCaseSensitive = true, | ||||
|                             ExceptionsAllowedBeforeBreaking = 3, | ||||
|                             DurationOfBreak =5, | ||||
|                             TimeoutValue = 5000 | ||||
|                         } | ||||
|                     } | ||||
|             }; | ||||
|   | ||||
| @@ -57,9 +57,6 @@ namespace Ocelot.AcceptanceTests | ||||
|                             DownstreamHost = "localhost", | ||||
|                             UpstreamTemplate = "/", | ||||
|                             UpstreamHttpMethod = "Get", | ||||
|                             ExceptionsAllowedBeforeBreaking = 3, | ||||
|                             DurationOfBreak =5, | ||||
|                             TimeoutValue = 5000, | ||||
|                             AuthenticationOptions = new FileAuthenticationOptions | ||||
|                             { | ||||
|                                 AdditionalScopes = new List<string> | ||||
|   | ||||
| @@ -57,9 +57,6 @@ namespace Ocelot.AcceptanceTests | ||||
|                             DownstreamHost = "localhost", | ||||
|                             UpstreamTemplate = "/", | ||||
|                             UpstreamHttpMethod = "Get", | ||||
|                             ExceptionsAllowedBeforeBreaking = 3, | ||||
|                             DurationOfBreak =5, | ||||
|                             TimeoutValue = 5000, | ||||
|                             AuthenticationOptions = new FileAuthenticationOptions | ||||
|                             { | ||||
|                                 AdditionalScopes = new List<string> | ||||
|   | ||||
| @@ -51,9 +51,6 @@ namespace Ocelot.AcceptanceTests | ||||
|                             DownstreamHost = "localhost", | ||||
|                             UpstreamTemplate = "/", | ||||
|                             UpstreamHttpMethod = "Get", | ||||
|                             ExceptionsAllowedBeforeBreaking = 3, | ||||
|                             DurationOfBreak =5, | ||||
|                             TimeoutValue = 5000, | ||||
|                         } | ||||
|                     } | ||||
|             }; | ||||
| @@ -91,9 +88,7 @@ namespace Ocelot.AcceptanceTests | ||||
|                             DownstreamHost = "localhost", | ||||
|                             UpstreamTemplate = "/", | ||||
|                             UpstreamHttpMethod = "Get", | ||||
|                             ExceptionsAllowedBeforeBreaking = 3, | ||||
|                             DurationOfBreak =5, | ||||
|                             TimeoutValue = 5000, | ||||
|  | ||||
|                         } | ||||
|                     } | ||||
|             }; | ||||
| @@ -131,9 +126,7 @@ namespace Ocelot.AcceptanceTests | ||||
|                             DownstreamHost = "localhost", | ||||
|                             UpstreamTemplate = "/", | ||||
|                             UpstreamHttpMethod = "Get", | ||||
|                             ExceptionsAllowedBeforeBreaking = 3, | ||||
|                             DurationOfBreak =5, | ||||
|                             TimeoutValue = 5000, | ||||
|  | ||||
|                         } | ||||
|                     } | ||||
|             }; | ||||
| @@ -171,9 +164,6 @@ namespace Ocelot.AcceptanceTests | ||||
|                             DownstreamHost = "localhost", | ||||
|                             UpstreamTemplate = "/", | ||||
|                             UpstreamHttpMethod = "Get", | ||||
|                             ExceptionsAllowedBeforeBreaking = 3, | ||||
|                             DurationOfBreak =5, | ||||
|                             TimeoutValue = 5000, | ||||
|                         } | ||||
|                     } | ||||
|             }; | ||||
| @@ -211,9 +201,6 @@ namespace Ocelot.AcceptanceTests | ||||
|                             DownstreamHost = "localhost", | ||||
|                             UpstreamTemplate = "/", | ||||
|                             UpstreamHttpMethod = "Get", | ||||
|                             ExceptionsAllowedBeforeBreaking = 3, | ||||
|                             DurationOfBreak =5, | ||||
|                             TimeoutValue = 5000, | ||||
|                         } | ||||
|                     } | ||||
|             }; | ||||
| @@ -251,9 +238,6 @@ namespace Ocelot.AcceptanceTests | ||||
|                             DownstreamHost = "localhost", | ||||
|                             UpstreamTemplate = "/", | ||||
|                             UpstreamHttpMethod = "Get", | ||||
|                             ExceptionsAllowedBeforeBreaking = 3, | ||||
|                             DurationOfBreak =5, | ||||
|                             TimeoutValue = 5000, | ||||
|                         } | ||||
|                     } | ||||
|             }; | ||||
|   | ||||
| @@ -40,10 +40,7 @@ namespace Ocelot.AcceptanceTests | ||||
|                             UpstreamTemplate = "/", | ||||
|                             UpstreamHttpMethod = "Get", | ||||
|                             RequestIdKey = _steps.RequestIdKey, | ||||
|                             ExceptionsAllowedBeforeBreaking = 3, | ||||
|                             DurationOfBreak =5, | ||||
|                             TimeoutValue = 5000, | ||||
|                         } | ||||
|                          } | ||||
|                     } | ||||
|             }; | ||||
|  | ||||
| @@ -70,10 +67,7 @@ namespace Ocelot.AcceptanceTests | ||||
|                             DownstreamHost = "localhost", | ||||
|                             UpstreamTemplate = "/", | ||||
|                             UpstreamHttpMethod = "Get", | ||||
|                             RequestIdKey = _steps.RequestIdKey, | ||||
|                             ExceptionsAllowedBeforeBreaking = 3, | ||||
|                             DurationOfBreak =5, | ||||
|                             TimeoutValue = 5000, | ||||
|   | ||||
|                         } | ||||
|                     } | ||||
|             }; | ||||
| @@ -101,11 +95,7 @@ namespace Ocelot.AcceptanceTests | ||||
|                             DownstreamPort = 51879, | ||||
|                             DownstreamScheme = "http", | ||||
|                             DownstreamHost = "localhost", | ||||
|                             UpstreamTemplate = "/", | ||||
|                             UpstreamHttpMethod = "Get", | ||||
|                             ExceptionsAllowedBeforeBreaking = 3, | ||||
|                             DurationOfBreak =5, | ||||
|                             TimeoutValue = 5000, | ||||
|                             UpstreamTemplate = "/",   | ||||
|                         } | ||||
|                     }, | ||||
|                 GlobalConfiguration = new FileGlobalConfiguration | ||||
|   | ||||
| @@ -46,9 +46,7 @@ namespace Ocelot.AcceptanceTests | ||||
|                             DownstreamPort = 51879, | ||||
|                             UpstreamTemplate = "/", | ||||
|                             UpstreamHttpMethod = "Get", | ||||
|                             ExceptionsAllowedBeforeBreaking = 3, | ||||
|                             DurationOfBreak =5, | ||||
|                             TimeoutValue = 5000, | ||||
|   | ||||
|                         } | ||||
|                     } | ||||
|             }; | ||||
| @@ -77,9 +75,7 @@ namespace Ocelot.AcceptanceTests | ||||
|                             DownstreamPort = 51879, | ||||
|                             UpstreamTemplate = "/", | ||||
|                             UpstreamHttpMethod = "Get", | ||||
|                             ExceptionsAllowedBeforeBreaking = 3, | ||||
|                             DurationOfBreak =5, | ||||
|                             TimeoutValue = 5000, | ||||
|   | ||||
|                         } | ||||
|                     } | ||||
|             }; | ||||
| @@ -108,9 +104,7 @@ namespace Ocelot.AcceptanceTests | ||||
|                             DownstreamPort = 51879, | ||||
|                             UpstreamTemplate = "/", | ||||
|                             UpstreamHttpMethod = "Get", | ||||
|                             ExceptionsAllowedBeforeBreaking = 3, | ||||
|                             DurationOfBreak =5, | ||||
|                             TimeoutValue = 5000, | ||||
|   | ||||
|                         } | ||||
|                     } | ||||
|             }; | ||||
| @@ -139,9 +133,7 @@ namespace Ocelot.AcceptanceTests | ||||
|                             DownstreamPort = 51879, | ||||
|                             UpstreamTemplate = "/products/", | ||||
|                             UpstreamHttpMethod = "Get", | ||||
|                             ExceptionsAllowedBeforeBreaking = 3, | ||||
|                             DurationOfBreak =5, | ||||
|                             TimeoutValue = 5000, | ||||
|   | ||||
|                         } | ||||
|                     } | ||||
|             }; | ||||
| @@ -170,9 +162,7 @@ namespace Ocelot.AcceptanceTests | ||||
|                             DownstreamPort = 51879, | ||||
|                             UpstreamTemplate = "/products", | ||||
|                             UpstreamHttpMethod = "Get", | ||||
|                             ExceptionsAllowedBeforeBreaking = 3, | ||||
|                             DurationOfBreak =5, | ||||
|                             TimeoutValue = 5000, | ||||
|   | ||||
|                         } | ||||
|                     } | ||||
|             }; | ||||
| @@ -201,9 +191,11 @@ namespace Ocelot.AcceptanceTests | ||||
|                             DownstreamPort = 51879, | ||||
|                             UpstreamTemplate = "/products/{productId}", | ||||
|                             UpstreamHttpMethod = "Get", | ||||
|                             QoSOptions = new FileQoSOptions() | ||||
|                             { | ||||
|                             ExceptionsAllowedBeforeBreaking = 3, | ||||
|                             DurationOfBreak =5, | ||||
|                             TimeoutValue = 5000, | ||||
|                             TimeoutValue = 5000 } | ||||
|                         } | ||||
|                     } | ||||
|             }; | ||||
| @@ -231,9 +223,6 @@ namespace Ocelot.AcceptanceTests | ||||
|                             DownstreamPort = 51879, | ||||
|                             UpstreamTemplate = "/products/{productId}", | ||||
|                             UpstreamHttpMethod = "Get", | ||||
|                             ExceptionsAllowedBeforeBreaking = 3, | ||||
|                             DurationOfBreak =5, | ||||
|                             TimeoutValue = 5000, | ||||
|                         } | ||||
|                     } | ||||
|             }; | ||||
| @@ -261,10 +250,7 @@ namespace Ocelot.AcceptanceTests | ||||
|                             DownstreamPort = 51879, | ||||
|                             DownstreamScheme = "http", | ||||
|                             UpstreamTemplate = "/", | ||||
|                             UpstreamHttpMethod = "Post", | ||||
|                             ExceptionsAllowedBeforeBreaking = 3, | ||||
|                             DurationOfBreak =5, | ||||
|                             TimeoutValue = 5000, | ||||
|                             UpstreamHttpMethod = "Post",  | ||||
|                         } | ||||
|                     } | ||||
|             }; | ||||
| @@ -293,9 +279,6 @@ namespace Ocelot.AcceptanceTests | ||||
|                             DownstreamHost = "localhost", | ||||
|                             DownstreamPort = 51879, | ||||
|                             UpstreamHttpMethod = "Get", | ||||
|                             ExceptionsAllowedBeforeBreaking = 3, | ||||
|                             DurationOfBreak =5, | ||||
|                             TimeoutValue = 5000, | ||||
|                         } | ||||
|                     } | ||||
|             }; | ||||
|   | ||||
| @@ -1 +1 @@ | ||||
| {"ReRoutes":[{"DownstreamPathTemplate":"41879/","UpstreamTemplate":"/","UpstreamHttpMethod":"Get","AuthenticationOptions":{"Provider":null,"ProviderRootUrl":null,"ScopeName":null,"RequireHttps":false,"AdditionalScopes":[],"ScopeSecret":null},"AddHeadersToRequest":{},"AddClaimsToRequest":{},"RouteClaimsRequirement":{},"AddQueriesToRequest":{},"RequestIdKey":null,"FileCacheOptions":{"TtlSeconds":0},"ReRouteIsCaseSensitive":false,"ServiceName":null,"DownstreamScheme":"http","DownstreamHost":"localhost","DownstreamPort":41879,"ExceptionsAllowedBeforeBreaking":3,"DurationOfBreak":5,"TimeoutValue":5000,"LoadBalancer":null}],"GlobalConfiguration":{"RequestIdKey":null,"ServiceDiscoveryProvider":{"Provider":null,"Host":null,"Port":0}}} | ||||
| {"ReRoutes":[{"DownstreamPathTemplate":"41879/","UpstreamTemplate":"/","UpstreamHttpMethod":"Get","AuthenticationOptions":{"Provider":null,"ProviderRootUrl":null,"ScopeName":null,"RequireHttps":false,"AdditionalScopes":[],"ScopeSecret":null},"AddHeadersToRequest":{},"AddClaimsToRequest":{},"RouteClaimsRequirement":{},"AddQueriesToRequest":{},"RequestIdKey":null,"FileCacheOptions":{"TtlSeconds":0},"ReRouteIsCaseSensitive":false,"ServiceName":null,"DownstreamScheme":"http","DownstreamHost":"localhost","DownstreamPort":41879,"QoSOptions":{"ExceptionsAllowedBeforeBreaking":0,"DurationOfBreak":0,"TimeoutValue":0},"LoadBalancer":null}],"GlobalConfiguration":{"RequestIdKey":null,"ServiceDiscoveryProvider":{"Provider":null,"Host":null,"Port":0}}} | ||||
| @@ -1,268 +1,305 @@ | ||||
| { | ||||
|     "ReRoutes": [ | ||||
|       { | ||||
|         "DownstreamPathTemplate": "/", | ||||
|         "DownstreamScheme": "http", | ||||
|         "DownstreamHost": "localhost", | ||||
|         "DownstreamPort": 52876, | ||||
|         "UpstreamTemplate": "/identityserverexample", | ||||
|         "UpstreamHttpMethod": "Get", | ||||
|         "ExceptionsAllowedBeforeBreaking": 3, | ||||
|         "DurationOfBreak": 10, | ||||
|         "TimeoutValue": 5000, | ||||
|         "AuthenticationOptions": { | ||||
|           "Provider": "IdentityServer", | ||||
|           "ProviderRootUrl": "http://localhost:52888", | ||||
|           "ScopeName": "api", | ||||
|           "AdditionalScopes": [ | ||||
|             "openid", | ||||
|             "offline_access" | ||||
|           ], | ||||
|           "ScopeSecret": "secret" | ||||
|         }, | ||||
|         "AddHeadersToRequest": { | ||||
|           "CustomerId": "Claims[CustomerId] > value", | ||||
|           "LocationId": "Claims[LocationId] > value", | ||||
|           "UserType": "Claims[sub] > value[0] > |", | ||||
|           "UserId": "Claims[sub] > value[1] > |" | ||||
|         }, | ||||
|         "AddClaimsToRequest": { | ||||
|           "CustomerId": "Claims[CustomerId] > value", | ||||
|           "LocationId": "Claims[LocationId] > value", | ||||
|           "UserType": "Claims[sub] > value[0] > |", | ||||
|           "UserId": "Claims[sub] > value[1] > |" | ||||
|         }, | ||||
|         "AddQueriesToRequest": { | ||||
|           "CustomerId": "Claims[CustomerId] > value", | ||||
|           "LocationId": "Claims[LocationId] > value", | ||||
|           "UserType": "Claims[sub] > value[0] > |", | ||||
|           "UserId": "Claims[sub] > value[1] > |" | ||||
|         }, | ||||
|         "RouteClaimsRequirement": { | ||||
|           "UserType": "registered" | ||||
|         }, | ||||
|         "RequestIdKey": "OcRequestId" | ||||
|       }, | ||||
|       { | ||||
|         "DownstreamPathTemplate": "/posts", | ||||
|         "DownstreamScheme": "http", | ||||
|         "DownstreamHost": "jsonplaceholder.typicode.com", | ||||
|         "DownstreamPort": 80, | ||||
|         "UpstreamTemplate": "/posts", | ||||
|         "UpstreamHttpMethod": "Get", | ||||
|         "ExceptionsAllowedBeforeBreaking": 3, | ||||
|         "DurationOfBreak": 10, | ||||
|         "TimeoutValue": 5000, | ||||
|         "FileCacheOptions": { "TtlSeconds": 15 } | ||||
|       }, | ||||
|       { | ||||
|         "DownstreamPathTemplate": "/posts/{postId}", | ||||
|         "DownstreamScheme": "http", | ||||
|         "DownstreamHost": "jsonplaceholder.typicode.com", | ||||
|         "DownstreamPort": 80, | ||||
|         "UpstreamTemplate": "/posts/{postId}", | ||||
|         "UpstreamHttpMethod": "Get", | ||||
|   "ReRoutes": [ | ||||
|     { | ||||
|       "DownstreamPathTemplate": "/", | ||||
|       "DownstreamScheme": "http", | ||||
|       "DownstreamHost": "localhost", | ||||
|       "DownstreamPort": 52876, | ||||
|       "UpstreamTemplate": "/identityserverexample", | ||||
|       "UpstreamHttpMethod": "Get", | ||||
|       "QoSOptions": { | ||||
|         "ExceptionsAllowedBeforeBreaking": 3, | ||||
|         "DurationOfBreak": 10, | ||||
|         "TimeoutValue": 5000 | ||||
|       }, | ||||
|       { | ||||
|         "DownstreamPathTemplate": "/posts/{postId}/comments", | ||||
|         "DownstreamScheme": "http", | ||||
|         "DownstreamHost": "jsonplaceholder.typicode.com", | ||||
|         "DownstreamPort": 80, | ||||
|         "UpstreamTemplate": "/posts/{postId}/comments", | ||||
|         "UpstreamHttpMethod": "Get", | ||||
|       "AuthenticationOptions": { | ||||
|         "Provider": "IdentityServer", | ||||
|         "ProviderRootUrl": "http://localhost:52888", | ||||
|         "ScopeName": "api", | ||||
|         "AdditionalScopes": [ | ||||
|           "openid", | ||||
|           "offline_access" | ||||
|         ], | ||||
|         "ScopeSecret": "secret" | ||||
|       }, | ||||
|       "AddHeadersToRequest": { | ||||
|         "CustomerId": "Claims[CustomerId] > value", | ||||
|         "LocationId": "Claims[LocationId] > value", | ||||
|         "UserType": "Claims[sub] > value[0] > |", | ||||
|         "UserId": "Claims[sub] > value[1] > |" | ||||
|       }, | ||||
|       "AddClaimsToRequest": { | ||||
|         "CustomerId": "Claims[CustomerId] > value", | ||||
|         "LocationId": "Claims[LocationId] > value", | ||||
|         "UserType": "Claims[sub] > value[0] > |", | ||||
|         "UserId": "Claims[sub] > value[1] > |" | ||||
|       }, | ||||
|       "AddQueriesToRequest": { | ||||
|         "CustomerId": "Claims[CustomerId] > value", | ||||
|         "LocationId": "Claims[LocationId] > value", | ||||
|         "UserType": "Claims[sub] > value[0] > |", | ||||
|         "UserId": "Claims[sub] > value[1] > |" | ||||
|       }, | ||||
|       "RouteClaimsRequirement": { | ||||
|         "UserType": "registered" | ||||
|       }, | ||||
|       "RequestIdKey": "OcRequestId" | ||||
|     }, | ||||
|     { | ||||
|       "DownstreamPathTemplate": "/posts", | ||||
|       "DownstreamScheme": "http", | ||||
|       "DownstreamHost": "jsonplaceholder.typicode.com", | ||||
|       "DownstreamPort": 80, | ||||
|       "UpstreamTemplate": "/posts", | ||||
|       "UpstreamHttpMethod": "Get", | ||||
|       "QoSOptions": { | ||||
|         "ExceptionsAllowedBeforeBreaking": 3, | ||||
|         "DurationOfBreak": 10, | ||||
|         "TimeoutValue": 5000 | ||||
|       }, | ||||
|       { | ||||
|         "DownstreamPathTemplate": "/comments", | ||||
|         "DownstreamScheme": "http", | ||||
|         "DownstreamHost": "jsonplaceholder.typicode.com", | ||||
|         "DownstreamPort": 80, | ||||
|         "UpstreamTemplate": "/comments", | ||||
|         "UpstreamHttpMethod": "Get", | ||||
|         "ExceptionsAllowedBeforeBreaking": 3, | ||||
|         "DurationOfBreak": 10, | ||||
|         "TimeoutValue": 5000 | ||||
|       }, | ||||
|       { | ||||
|         "DownstreamPathTemplate": "/posts", | ||||
|         "DownstreamScheme": "http", | ||||
|         "DownstreamHost": "jsonplaceholder.typicode.com", | ||||
|         "DownstreamPort": 80, | ||||
|         "UpstreamTemplate": "/posts", | ||||
|         "UpstreamHttpMethod": "Post", | ||||
|         "ExceptionsAllowedBeforeBreaking": 3, | ||||
|         "DurationOfBreak": 10, | ||||
|         "TimeoutValue": 5000 | ||||
|       }, | ||||
|       { | ||||
|         "DownstreamPathTemplate": "/posts/{postId}", | ||||
|         "DownstreamScheme": "http", | ||||
|         "DownstreamHost": "jsonplaceholder.typicode.com", | ||||
|         "DownstreamPort": 80, | ||||
|         "UpstreamTemplate": "/posts/{postId}", | ||||
|         "UpstreamHttpMethod": "Put", | ||||
|         "ExceptionsAllowedBeforeBreaking": 3, | ||||
|         "DurationOfBreak": 10, | ||||
|         "TimeoutValue": 5000 | ||||
|       }, | ||||
|       { | ||||
|         "DownstreamPathTemplate": "/posts/{postId}", | ||||
|         "DownstreamScheme": "http", | ||||
|         "DownstreamHost": "jsonplaceholder.typicode.com", | ||||
|         "DownstreamPort": 80, | ||||
|         "UpstreamTemplate": "/posts/{postId}", | ||||
|         "UpstreamHttpMethod": "Patch", | ||||
|         "ExceptionsAllowedBeforeBreaking": 3, | ||||
|         "DurationOfBreak": 10, | ||||
|         "TimeoutValue": 5000 | ||||
|       }, | ||||
|       { | ||||
|         "DownstreamPathTemplate": "/posts/{postId}", | ||||
|         "DownstreamScheme": "http", | ||||
|         "DownstreamHost": "jsonplaceholder.typicode.com", | ||||
|         "DownstreamPort": 80, | ||||
|         "UpstreamTemplate": "/posts/{postId}", | ||||
|         "UpstreamHttpMethod": "Delete", | ||||
|         "ExceptionsAllowedBeforeBreaking": 3, | ||||
|         "DurationOfBreak": 10, | ||||
|         "TimeoutValue": 5000 | ||||
|       }, | ||||
|       { | ||||
|         "DownstreamPathTemplate": "/api/products", | ||||
|         "DownstreamScheme": "http", | ||||
|         "DownstreamHost": "jsonplaceholder.typicode.com", | ||||
|         "DownstreamPort": 80, | ||||
|         "UpstreamTemplate": "/products", | ||||
|         "UpstreamHttpMethod": "Get", | ||||
|         "ExceptionsAllowedBeforeBreaking": 3, | ||||
|         "DurationOfBreak": 10, | ||||
|         "TimeoutValue": 5000, | ||||
|         "FileCacheOptions": { "TtlSeconds": 15 } | ||||
|       }, | ||||
|         { | ||||
|             "DownstreamPathTemplate": "/api/products/{productId}", | ||||
|             "DownstreamScheme": "http", | ||||
|             "DownstreamHost": "jsonplaceholder.typicode.com", | ||||
|             "DownstreamPort": 80, | ||||
|             "UpstreamTemplate": "/products/{productId}", | ||||
|             "UpstreamHttpMethod": "Get", | ||||
|             "FileCacheOptions": { "TtlSeconds": 15 } | ||||
|         }, | ||||
|       { | ||||
|         "DownstreamPathTemplate": "/api/products", | ||||
|         "DownstreamScheme": "http", | ||||
|         "DownstreamHost": "products20161126090340.azurewebsites.net", | ||||
|         "DownstreamPort": 80, | ||||
|         "UpstreamTemplate": "/products", | ||||
|         "UpstreamHttpMethod": "Post", | ||||
|         "ExceptionsAllowedBeforeBreaking": 3, | ||||
|         "DurationOfBreak": 10, | ||||
|         "TimeoutValue": 5000, | ||||
|         "FileCacheOptions": { "TtlSeconds": 15 } | ||||
|       }, | ||||
|       { | ||||
|         "DownstreamPathTemplate": "/api/products/{productId}", | ||||
|         "DownstreamScheme": "http", | ||||
|         "DownstreamHost": "products20161126090340.azurewebsites.net", | ||||
|         "DownstreamPort": 80, | ||||
|         "UpstreamTemplate": "/products/{productId}", | ||||
|         "UpstreamHttpMethod": "Put", | ||||
|         "ExceptionsAllowedBeforeBreaking": 3, | ||||
|         "DurationOfBreak": 10, | ||||
|         "TimeoutValue": 5000, | ||||
|         "FileCacheOptions": { "TtlSeconds": 15 } | ||||
|       }, | ||||
|       { | ||||
|         "DownstreamPathTemplate": "/api/products/{productId}", | ||||
|         "DownstreamScheme": "http", | ||||
|         "DownstreamHost": "products20161126090340.azurewebsites.net", | ||||
|         "DownstreamPort": 80, | ||||
|         "UpstreamTemplate": "/products/{productId}", | ||||
|         "UpstreamHttpMethod": "Delete", | ||||
|         "ExceptionsAllowedBeforeBreaking": 3, | ||||
|         "DurationOfBreak": 10, | ||||
|         "TimeoutValue": 5000, | ||||
|         "FileCacheOptions": { "TtlSeconds": 15 } | ||||
|       }, | ||||
|       { | ||||
|         "DownstreamPathTemplate": "/api/customers", | ||||
|         "DownstreamScheme": "http", | ||||
|         "DownstreamHost": "customers20161126090811.azurewebsites.net", | ||||
|         "DownstreamPort": 80, | ||||
|         "UpstreamTemplate": "/customers", | ||||
|         "UpstreamHttpMethod": "Get", | ||||
|         "ExceptionsAllowedBeforeBreaking": 3, | ||||
|         "DurationOfBreak": 10, | ||||
|         "TimeoutValue": 5000, | ||||
|         "FileCacheOptions": { "TtlSeconds": 15 } | ||||
|       }, | ||||
|       { | ||||
|         "DownstreamPathTemplate": "/api/customers/{customerId}", | ||||
|         "DownstreamScheme": "http", | ||||
|         "DownstreamHost": "customers20161126090811.azurewebsites.net", | ||||
|         "DownstreamPort": 80, | ||||
|         "UpstreamTemplate": "/customers/{customerId}", | ||||
|         "UpstreamHttpMethod": "Get", | ||||
|         "ExceptionsAllowedBeforeBreaking": 3, | ||||
|         "DurationOfBreak": 10, | ||||
|         "TimeoutValue": 5000, | ||||
|         "FileCacheOptions": { "TtlSeconds": 15 } | ||||
|       }, | ||||
|       { | ||||
|         "DownstreamPathTemplate": "/api/customers", | ||||
|         "DownstreamScheme": "http", | ||||
|         "DownstreamHost": "customers20161126090811.azurewebsites.net", | ||||
|         "DownstreamPort": 80, | ||||
|         "UpstreamTemplate": "/customers", | ||||
|         "UpstreamHttpMethod": "Post", | ||||
|         "ExceptionsAllowedBeforeBreaking": 3, | ||||
|         "DurationOfBreak": 10, | ||||
|         "TimeoutValue": 5000, | ||||
|         "FileCacheOptions": { "TtlSeconds": 15 } | ||||
|       }, | ||||
|       { | ||||
|         "DownstreamPathTemplate": "/api/customers/{customerId}", | ||||
|         "DownstreamScheme": "http", | ||||
|         "DownstreamHost": "customers20161126090811.azurewebsites.net", | ||||
|         "DownstreamPort": 80, | ||||
|         "UpstreamTemplate": "/customers/{customerId}", | ||||
|         "UpstreamHttpMethod": "Put", | ||||
|         "ExceptionsAllowedBeforeBreaking": 3, | ||||
|         "DurationOfBreak": 10, | ||||
|         "TimeoutValue": 5000, | ||||
|         "FileCacheOptions": { "TtlSeconds": 15 } | ||||
|       }, | ||||
|       { | ||||
|         "DownstreamPathTemplate": "/api/customers/{customerId}", | ||||
|         "DownstreamScheme": "http", | ||||
|         "DownstreamHost": "customers20161126090811.azurewebsites.net", | ||||
|         "DownstreamPort": 80, | ||||
|         "UpstreamTemplate": "/customers/{customerId}", | ||||
|         "UpstreamHttpMethod": "Delete", | ||||
|         "ExceptionsAllowedBeforeBreaking": 3, | ||||
|         "DurationOfBreak": 10, | ||||
|         "TimeoutValue": 5000, | ||||
|         "FileCacheOptions": { "TtlSeconds": 15 } | ||||
|       }, | ||||
|       { | ||||
|         "DownstreamPathTemplate": "/posts", | ||||
|         "DownstreamScheme": "http", | ||||
|         "DownstreamHost": "jsonplaceholder.typicode.com", | ||||
|         "DownstreamPort": 80, | ||||
|         "UpstreamTemplate": "/posts/", | ||||
|         "UpstreamHttpMethod": "Get", | ||||
|         "ExceptionsAllowedBeforeBreaking": 3, | ||||
|         "DurationOfBreak": 10, | ||||
|         "TimeoutValue": 5000, | ||||
|         "FileCacheOptions": { "TtlSeconds": 15 } | ||||
|       } | ||||
|     ], | ||||
|     "GlobalConfiguration": { | ||||
|         "RequestIdKey": "OcRequestId" | ||||
|     }, | ||||
|     { | ||||
|       "DownstreamPathTemplate": "/posts/{postId}", | ||||
|       "DownstreamScheme": "http", | ||||
|       "DownstreamHost": "jsonplaceholder.typicode.com", | ||||
|       "DownstreamPort": 80, | ||||
|       "UpstreamTemplate": "/posts/{postId}", | ||||
|       "UpstreamHttpMethod": "Get", | ||||
|       "QoSOptions": { | ||||
|         "ExceptionsAllowedBeforeBreaking": 3, | ||||
|         "DurationOfBreak": 10, | ||||
|         "TimeoutValue": 5000 | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "DownstreamPathTemplate": "/posts/{postId}/comments", | ||||
|       "DownstreamScheme": "http", | ||||
|       "DownstreamHost": "jsonplaceholder.typicode.com", | ||||
|       "DownstreamPort": 80, | ||||
|       "UpstreamTemplate": "/posts/{postId}/comments", | ||||
|       "UpstreamHttpMethod": "Get", | ||||
|       "QoSOptions": { | ||||
|         "ExceptionsAllowedBeforeBreaking": 3, | ||||
|         "DurationOfBreak": 10, | ||||
|         "TimeoutValue": 5000 | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "DownstreamPathTemplate": "/comments", | ||||
|       "DownstreamScheme": "http", | ||||
|       "DownstreamHost": "jsonplaceholder.typicode.com", | ||||
|       "DownstreamPort": 80, | ||||
|       "UpstreamTemplate": "/comments", | ||||
|       "UpstreamHttpMethod": "Get", | ||||
|       "QoSOptions": { | ||||
|         "ExceptionsAllowedBeforeBreaking": 3, | ||||
|         "DurationOfBreak": 10, | ||||
|         "TimeoutValue": 5000 | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "DownstreamPathTemplate": "/posts", | ||||
|       "DownstreamScheme": "http", | ||||
|       "DownstreamHost": "jsonplaceholder.typicode.com", | ||||
|       "DownstreamPort": 80, | ||||
|       "UpstreamTemplate": "/posts", | ||||
|       "UpstreamHttpMethod": "Post", | ||||
|       "QoSOptions": { | ||||
|         "ExceptionsAllowedBeforeBreaking": 3, | ||||
|         "DurationOfBreak": 10, | ||||
|         "TimeoutValue": 5000 | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "DownstreamPathTemplate": "/posts/{postId}", | ||||
|       "DownstreamScheme": "http", | ||||
|       "DownstreamHost": "jsonplaceholder.typicode.com", | ||||
|       "DownstreamPort": 80, | ||||
|       "UpstreamTemplate": "/posts/{postId}", | ||||
|       "UpstreamHttpMethod": "Put", | ||||
|       "QoSOptions": { | ||||
|         "ExceptionsAllowedBeforeBreaking": 3, | ||||
|         "DurationOfBreak": 10, | ||||
|         "TimeoutValue": 5000 | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "DownstreamPathTemplate": "/posts/{postId}", | ||||
|       "DownstreamScheme": "http", | ||||
|       "DownstreamHost": "jsonplaceholder.typicode.com", | ||||
|       "DownstreamPort": 80, | ||||
|       "UpstreamTemplate": "/posts/{postId}", | ||||
|       "UpstreamHttpMethod": "Patch", | ||||
|       "QoSOptions": { | ||||
|         "ExceptionsAllowedBeforeBreaking": 3, | ||||
|         "DurationOfBreak": 10, | ||||
|         "TimeoutValue": 5000 | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "DownstreamPathTemplate": "/posts/{postId}", | ||||
|       "DownstreamScheme": "http", | ||||
|       "DownstreamHost": "jsonplaceholder.typicode.com", | ||||
|       "DownstreamPort": 80, | ||||
|       "UpstreamTemplate": "/posts/{postId}", | ||||
|       "UpstreamHttpMethod": "Delete", | ||||
|       "QoSOptions": { | ||||
|         "ExceptionsAllowedBeforeBreaking": 3, | ||||
|         "DurationOfBreak": 10, | ||||
|         "TimeoutValue": 5000 | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "DownstreamPathTemplate": "/api/products", | ||||
|       "DownstreamScheme": "http", | ||||
|       "DownstreamHost": "jsonplaceholder.typicode.com", | ||||
|       "DownstreamPort": 80, | ||||
|       "UpstreamTemplate": "/products", | ||||
|       "UpstreamHttpMethod": "Get", | ||||
|       "QoSOptions": { | ||||
|         "ExceptionsAllowedBeforeBreaking": 3, | ||||
|         "DurationOfBreak": 10, | ||||
|         "TimeoutValue": 5000 | ||||
|       }, | ||||
|       "FileCacheOptions": { "TtlSeconds": 15 } | ||||
|     }, | ||||
|     { | ||||
|       "DownstreamPathTemplate": "/api/products/{productId}", | ||||
|       "DownstreamScheme": "http", | ||||
|       "DownstreamHost": "jsonplaceholder.typicode.com", | ||||
|       "DownstreamPort": 80, | ||||
|       "UpstreamTemplate": "/products/{productId}", | ||||
|       "UpstreamHttpMethod": "Get", | ||||
|       "FileCacheOptions": { "TtlSeconds": 15 } | ||||
|     }, | ||||
|     { | ||||
|       "DownstreamPathTemplate": "/api/products", | ||||
|       "DownstreamScheme": "http", | ||||
|       "DownstreamHost": "products20161126090340.azurewebsites.net", | ||||
|       "DownstreamPort": 80, | ||||
|       "UpstreamTemplate": "/products", | ||||
|       "UpstreamHttpMethod": "Post", | ||||
|       "QoSOptions": { | ||||
|         "ExceptionsAllowedBeforeBreaking": 3, | ||||
|         "DurationOfBreak": 10, | ||||
|         "TimeoutValue": 5000 | ||||
|       } | ||||
|     }, | ||||
|     { | ||||
|       "DownstreamPathTemplate": "/api/products/{productId}", | ||||
|       "DownstreamScheme": "http", | ||||
|       "DownstreamHost": "products20161126090340.azurewebsites.net", | ||||
|       "DownstreamPort": 80, | ||||
|       "UpstreamTemplate": "/products/{productId}", | ||||
|       "UpstreamHttpMethod": "Put", | ||||
|       "QoSOptions": { | ||||
|         "ExceptionsAllowedBeforeBreaking": 3, | ||||
|         "DurationOfBreak": 10, | ||||
|         "TimeoutValue": 5000 | ||||
|       }, | ||||
|       "FileCacheOptions": { "TtlSeconds": 15 } | ||||
|     }, | ||||
|     { | ||||
|       "DownstreamPathTemplate": "/api/products/{productId}", | ||||
|       "DownstreamScheme": "http", | ||||
|       "DownstreamHost": "products20161126090340.azurewebsites.net", | ||||
|       "DownstreamPort": 80, | ||||
|       "UpstreamTemplate": "/products/{productId}", | ||||
|       "UpstreamHttpMethod": "Delete", | ||||
|       "QoSOptions": { | ||||
|         "ExceptionsAllowedBeforeBreaking": 3, | ||||
|         "DurationOfBreak": 10, | ||||
|         "TimeoutValue": 5000 | ||||
|       }, | ||||
|       "FileCacheOptions": { "TtlSeconds": 15 } | ||||
|     }, | ||||
|     { | ||||
|       "DownstreamPathTemplate": "/api/customers", | ||||
|       "DownstreamScheme": "http", | ||||
|       "DownstreamHost": "customers20161126090811.azurewebsites.net", | ||||
|       "DownstreamPort": 80, | ||||
|       "UpstreamTemplate": "/customers", | ||||
|       "UpstreamHttpMethod": "Get", | ||||
|       "QoSOptions": { | ||||
|         "ExceptionsAllowedBeforeBreaking": 3, | ||||
|         "DurationOfBreak": 10, | ||||
|         "TimeoutValue": 5000 | ||||
|       }, | ||||
|       "FileCacheOptions": { "TtlSeconds": 15 } | ||||
|     }, | ||||
|     { | ||||
|       "DownstreamPathTemplate": "/api/customers/{customerId}", | ||||
|       "DownstreamScheme": "http", | ||||
|       "DownstreamHost": "customers20161126090811.azurewebsites.net", | ||||
|       "DownstreamPort": 80, | ||||
|       "UpstreamTemplate": "/customers/{customerId}", | ||||
|       "UpstreamHttpMethod": "Get", | ||||
|       "QoSOptions": { | ||||
|         "ExceptionsAllowedBeforeBreaking": 3, | ||||
|         "DurationOfBreak": 10, | ||||
|         "TimeoutValue": 5000 | ||||
|       }, | ||||
|       "FileCacheOptions": { "TtlSeconds": 15 } | ||||
|     }, | ||||
|     { | ||||
|       "DownstreamPathTemplate": "/api/customers", | ||||
|       "DownstreamScheme": "http", | ||||
|       "DownstreamHost": "customers20161126090811.azurewebsites.net", | ||||
|       "DownstreamPort": 80, | ||||
|       "UpstreamTemplate": "/customers", | ||||
|       "UpstreamHttpMethod": "Post", | ||||
|       "QoSOptions": { | ||||
|         "ExceptionsAllowedBeforeBreaking": 3, | ||||
|         "DurationOfBreak": 10, | ||||
|         "TimeoutValue": 5000 | ||||
|       }, | ||||
|       "FileCacheOptions": { "TtlSeconds": 15 } | ||||
|     }, | ||||
|     { | ||||
|       "DownstreamPathTemplate": "/api/customers/{customerId}", | ||||
|       "DownstreamScheme": "http", | ||||
|       "DownstreamHost": "customers20161126090811.azurewebsites.net", | ||||
|       "DownstreamPort": 80, | ||||
|       "UpstreamTemplate": "/customers/{customerId}", | ||||
|       "UpstreamHttpMethod": "Put", | ||||
|       "QoSOptions": { | ||||
|         "ExceptionsAllowedBeforeBreaking": 3, | ||||
|         "DurationOfBreak": 10, | ||||
|         "TimeoutValue": 5000 | ||||
|       }, | ||||
|       "FileCacheOptions": { "TtlSeconds": 15 } | ||||
|     }, | ||||
|     { | ||||
|       "DownstreamPathTemplate": "/api/customers/{customerId}", | ||||
|       "DownstreamScheme": "http", | ||||
|       "DownstreamHost": "customers20161126090811.azurewebsites.net", | ||||
|       "DownstreamPort": 80, | ||||
|       "UpstreamTemplate": "/customers/{customerId}", | ||||
|       "UpstreamHttpMethod": "Delete", | ||||
|       "QoSOptions": { | ||||
|         "ExceptionsAllowedBeforeBreaking": 3, | ||||
|         "DurationOfBreak": 10, | ||||
|         "TimeoutValue": 5000 | ||||
|       }, | ||||
|       "FileCacheOptions": { "TtlSeconds": 15 } | ||||
|     }, | ||||
|     { | ||||
|       "DownstreamPathTemplate": "/posts", | ||||
|       "DownstreamScheme": "http", | ||||
|       "DownstreamHost": "jsonplaceholder.typicode.com", | ||||
|       "DownstreamPort": 80, | ||||
|       "UpstreamTemplate": "/posts/", | ||||
|       "UpstreamHttpMethod": "Get", | ||||
|       "QoSOptions": { | ||||
|         "ExceptionsAllowedBeforeBreaking": 3, | ||||
|         "DurationOfBreak": 10, | ||||
|         "TimeoutValue": 5000 | ||||
|       }, | ||||
|       "FileCacheOptions": { "TtlSeconds": 15 } | ||||
|     } | ||||
|   ], | ||||
|  | ||||
|   "GlobalConfiguration": { | ||||
|     "RequestIdKey": "OcRequestId" | ||||
|   } | ||||
| } | ||||
| @@ -29,7 +29,6 @@ namespace Ocelot.UnitTests.LoadBalancer | ||||
|         private readonly HttpClient _client; | ||||
|         private HttpResponseMessage _result; | ||||
|         private HostAndPort _hostAndPort; | ||||
|         private OkResponse<Ocelot.Request.Request> _request; | ||||
|         private OkResponse<string> _downstreamUrl; | ||||
|         private OkResponse<DownstreamRoute> _downstreamRoute; | ||||
|         private ErrorResponse<ILoadBalancer> _getLoadBalancerHouseError; | ||||
|   | ||||
| @@ -19,6 +19,7 @@ using Ocelot.Request.Middleware; | ||||
| using Ocelot.Responses; | ||||
| using TestStack.BDDfy; | ||||
| using Xunit; | ||||
| using Ocelot.Configuration; | ||||
|  | ||||
| namespace Ocelot.UnitTests.Request | ||||
| { | ||||
| @@ -72,7 +73,7 @@ namespace Ocelot.UnitTests.Request | ||||
|  | ||||
|             this.Given(x => x.GivenTheDownStreamUrlIs("any old string")) | ||||
|                 .And(x => x.GivenTheDownStreamRouteIs(downstreamRoute)) | ||||
|                 .And(x => x.GivenTheRequestBuilderReturns(new Ocelot.Request.Request(new HttpRequestMessage(), new CookieContainer(),new Values.QoS(3, 8 ,5000, Polly.Timeout.TimeoutStrategy.Pessimistic)))) | ||||
|                 .And(x => x.GivenTheRequestBuilderReturns(new Ocelot.Request.Request(new HttpRequestMessage(), new CookieContainer(), true, new QoSOptions(3, 8 ,5000, Polly.Timeout.TimeoutStrategy.Pessimistic)))) | ||||
|                 .When(x => x.WhenICallTheMiddleware()) | ||||
|                 .Then(x => x.ThenTheScopedDataRepositoryIsCalledCorrectly()) | ||||
|                 .BDDfy(); | ||||
| @@ -91,7 +92,7 @@ namespace Ocelot.UnitTests.Request | ||||
|             _request = new OkResponse<Ocelot.Request.Request>(request); | ||||
|             _requestBuilder | ||||
|                 .Setup(x => x.Build(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<Stream>(), It.IsAny<IHeaderDictionary>(), | ||||
|                 It.IsAny<IRequestCookieCollection>(), It.IsAny<QueryString>(), It.IsAny<string>(), It.IsAny<Ocelot.RequestId.RequestId>(),It.IsAny<Values.QoS>())) | ||||
|                 It.IsAny<IRequestCookieCollection>(), It.IsAny<QueryString>(), It.IsAny<string>(), It.IsAny<Ocelot.RequestId.RequestId>(),It.IsAny<bool>(), It.IsAny<QoSOptions>())) | ||||
|                 .ReturnsAsync(_request); | ||||
|         } | ||||
|  | ||||
|   | ||||
| @@ -10,6 +10,7 @@ using Ocelot.Responses; | ||||
| using Shouldly; | ||||
| using TestStack.BDDfy; | ||||
| using Xunit; | ||||
| using Ocelot.Configuration; | ||||
|  | ||||
| namespace Ocelot.UnitTests.Request | ||||
| { | ||||
| @@ -25,7 +26,8 @@ namespace Ocelot.UnitTests.Request | ||||
|         private readonly IRequestCreator _requestCreator; | ||||
|         private Response<Ocelot.Request.Request> _result; | ||||
|         private Ocelot.RequestId.RequestId _requestId; | ||||
|         private Ocelot.Values.QoS _qos; | ||||
|         private bool _isQos; | ||||
|         private QoSOptions _qos; | ||||
|  | ||||
|         public RequestBuilderTests() | ||||
|         { | ||||
| @@ -38,7 +40,7 @@ namespace Ocelot.UnitTests.Request | ||||
|         { | ||||
|             this.Given(x => x.GivenIHaveHttpMethod("GET")) | ||||
|                 .And(x => x.GivenIHaveDownstreamUrl("http://www.bbc.co.uk")) | ||||
|                 .And(x=> x.GivenTheQos(new Values.QoS(3, 8, 5000, Polly.Timeout.TimeoutStrategy.Pessimistic))) | ||||
|                 .And(x=> x.GivenTheQos(true,new QoSOptions(3, 8, 5000, Polly.Timeout.TimeoutStrategy.Pessimistic))) | ||||
|                 .When(x => x.WhenICreateARequest()) | ||||
|                 .And(x => x.ThenTheCorrectDownstreamUrlIsUsed("http://www.bbc.co.uk/")) | ||||
|                 .BDDfy(); | ||||
| @@ -49,7 +51,7 @@ namespace Ocelot.UnitTests.Request | ||||
|         { | ||||
|             this.Given(x => x.GivenIHaveHttpMethod("POST")) | ||||
|                 .And(x => x.GivenIHaveDownstreamUrl("http://www.bbc.co.uk")) | ||||
|                 .And(x => x.GivenTheQos(new Values.QoS(3, 8, 5000, Polly.Timeout.TimeoutStrategy.Pessimistic))) | ||||
|                 .And(x => x.GivenTheQos(true,new QoSOptions(3, 8, 5000, Polly.Timeout.TimeoutStrategy.Pessimistic))) | ||||
|  | ||||
|                 .When(x => x.WhenICreateARequest()) | ||||
|                 .And(x => x.ThenTheCorrectHttpMethodIsUsed(HttpMethod.Post)) | ||||
| @@ -63,7 +65,7 @@ namespace Ocelot.UnitTests.Request | ||||
|                 .And(x => x.GivenIHaveDownstreamUrl("http://www.bbc.co.uk")) | ||||
|                 .And(x => x.GivenIHaveTheHttpContent(new StringContent("Hi from Tom"))) | ||||
|                 .And(x => x.GivenTheContentTypeIs("application/json")) | ||||
|                               .And(x => x.GivenTheQos(new Values.QoS(3, 8, 5000, Polly.Timeout.TimeoutStrategy.Pessimistic))) | ||||
|                               .And(x => x.GivenTheQos(true, new QoSOptions(3, 8, 5000, Polly.Timeout.TimeoutStrategy.Pessimistic))) | ||||
|  | ||||
|                               .When(x => x.WhenICreateARequest()) | ||||
|                .And(x => x.ThenTheCorrectContentIsUsed(new StringContent("Hi from Tom"))) | ||||
| @@ -77,7 +79,7 @@ namespace Ocelot.UnitTests.Request | ||||
|                 .And(x => x.GivenIHaveDownstreamUrl("http://www.bbc.co.uk")) | ||||
|                 .And(x => x.GivenIHaveTheHttpContent(new StringContent("Hi from Tom"))) | ||||
|                 .And(x => x.GivenTheContentTypeIs("application/json")) | ||||
|                 .And(x => x.GivenTheQos(new Values.QoS(3, 8, 5000, Polly.Timeout.TimeoutStrategy.Pessimistic))) | ||||
|                 .And(x => x.GivenTheQos(true, new QoSOptions(3, 8, 5000, Polly.Timeout.TimeoutStrategy.Pessimistic))) | ||||
|  | ||||
|                .When(x => x.WhenICreateARequest()) | ||||
|                .And(x => x.ThenTheCorrectContentHeadersAreUsed(new HeaderDictionary | ||||
| @@ -96,7 +98,7 @@ namespace Ocelot.UnitTests.Request | ||||
|                 .And(x => x.GivenIHaveDownstreamUrl("http://www.bbc.co.uk")) | ||||
|                 .And(x => x.GivenIHaveTheHttpContent(new StringContent("Hi from Tom"))) | ||||
|                 .And(x => x.GivenTheContentTypeIs("application/json; charset=utf-8")) | ||||
|                                 .And(x => x.GivenTheQos(new Values.QoS(3, 8, 5000, Polly.Timeout.TimeoutStrategy.Pessimistic))) | ||||
|                                 .And(x => x.GivenTheQos(true, new QoSOptions(3, 8, 5000, Polly.Timeout.TimeoutStrategy.Pessimistic))) | ||||
|  | ||||
|                .When(x => x.WhenICreateARequest()) | ||||
|                .And(x => x.ThenTheCorrectContentHeadersAreUsed(new HeaderDictionary | ||||
| @@ -117,7 +119,7 @@ namespace Ocelot.UnitTests.Request | ||||
|                 { | ||||
|                     {"ChopSticks", "Bubbles" } | ||||
|                 })) | ||||
|                                 .And(x => x.GivenTheQos(new Values.QoS(3, 8, 5000, Polly.Timeout.TimeoutStrategy.Pessimistic))) | ||||
|                                 .And(x => x.GivenTheQos(true, new QoSOptions(3, 8, 5000, Polly.Timeout.TimeoutStrategy.Pessimistic))) | ||||
|  | ||||
|                 .When(x => x.WhenICreateARequest()) | ||||
|                 .And(x => x.ThenTheCorrectHeadersAreUsed(new HeaderDictionary | ||||
| @@ -136,7 +138,7 @@ namespace Ocelot.UnitTests.Request | ||||
|                 .And(x => x.GivenIHaveDownstreamUrl("http://www.bbc.co.uk")) | ||||
|                 .And(x => x.GivenTheHttpHeadersAre(new HeaderDictionary())) | ||||
|                 .And(x => x.GivenTheRequestIdIs(new Ocelot.RequestId.RequestId("RequestId", requestId))) | ||||
|                               .And(x => x.GivenTheQos(new Values.QoS(3, 8, 5000, Polly.Timeout.TimeoutStrategy.Pessimistic))) | ||||
|                               .And(x => x.GivenTheQos(true, new QoSOptions(3, 8, 5000, Polly.Timeout.TimeoutStrategy.Pessimistic))) | ||||
|   .When(x => x.WhenICreateARequest()) | ||||
|                 .And(x => x.ThenTheCorrectHeadersAreUsed(new HeaderDictionary | ||||
|                 { | ||||
| @@ -155,7 +157,7 @@ namespace Ocelot.UnitTests.Request | ||||
|                     {"RequestId", "534534gv54gv45g" } | ||||
|                 })) | ||||
|                 .And(x => x.GivenTheRequestIdIs(new Ocelot.RequestId.RequestId("RequestId", Guid.NewGuid().ToString()))) | ||||
|                                .And(x => x.GivenTheQos(new Values.QoS(3, 8, 5000, Polly.Timeout.TimeoutStrategy.Pessimistic))) | ||||
|                                .And(x => x.GivenTheQos(true, new QoSOptions(3, 8, 5000, Polly.Timeout.TimeoutStrategy.Pessimistic))) | ||||
|  .When(x => x.WhenICreateARequest()) | ||||
|                 .And(x => x.ThenTheCorrectHeadersAreUsed(new HeaderDictionary | ||||
|                 { | ||||
| @@ -175,7 +177,7 @@ namespace Ocelot.UnitTests.Request | ||||
|                 .And(x => x.GivenIHaveDownstreamUrl("http://www.bbc.co.uk")) | ||||
|                 .And(x => x.GivenTheHttpHeadersAre(new HeaderDictionary())) | ||||
|                 .And(x => x.GivenTheRequestIdIs(new Ocelot.RequestId.RequestId(requestIdKey, requestIdValue))) | ||||
|                               .And(x => x.GivenTheQos(new Values.QoS(3, 8, 5000, Polly.Timeout.TimeoutStrategy.Pessimistic))) | ||||
|                               .And(x => x.GivenTheQos(true, new QoSOptions(3, 8, 5000, Polly.Timeout.TimeoutStrategy.Pessimistic))) | ||||
|   .When(x => x.WhenICreateARequest()) | ||||
|                 .And(x => x.ThenTheRequestIdIsNotInTheHeaders()) | ||||
|                 .BDDfy(); | ||||
| @@ -186,8 +188,9 @@ namespace Ocelot.UnitTests.Request | ||||
|             _requestId = requestId; | ||||
|         } | ||||
|  | ||||
|         private void GivenTheQos(Ocelot.Values.QoS qos) | ||||
|         private void GivenTheQos(bool isQos, QoSOptions qos) | ||||
|         { | ||||
|             _isQos = isQos; | ||||
|             _qos = qos; | ||||
|         } | ||||
|  | ||||
| @@ -301,7 +304,7 @@ namespace Ocelot.UnitTests.Request | ||||
|         private void WhenICreateARequest() | ||||
|         { | ||||
|             _result = _requestCreator.Build(_httpMethod, _downstreamUrl, _content?.ReadAsStreamAsync().Result, _headers, | ||||
|                 _cookies, _query, _contentType, _requestId, _qos).Result; | ||||
|                 _cookies, _query, _contentType, _requestId,_isQos,_qos).Result; | ||||
|         } | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -61,7 +61,7 @@ namespace Ocelot.UnitTests.Requester | ||||
|         [Fact] | ||||
|         public void should_call_scoped_data_repository_correctly() | ||||
|         { | ||||
|             this.Given(x => x.GivenTheRequestIs(new Ocelot.Request.Request(new HttpRequestMessage(),new CookieContainer(), new Values.QoS(3, 8, 5000, Polly.Timeout.TimeoutStrategy.Pessimistic)))) | ||||
|             this.Given(x => x.GivenTheRequestIs(new Ocelot.Request.Request(new HttpRequestMessage(),new CookieContainer(),true, new Ocelot.Configuration.QoSOptions(3, 8, 5000, Polly.Timeout.TimeoutStrategy.Pessimistic)))) | ||||
|                 .And(x => x.GivenTheRequesterReturns(new HttpResponseMessage())) | ||||
|                 .And(x => x.GivenTheScopedRepoReturns()) | ||||
|                 .When(x => x.WhenICallTheMiddleware()) | ||||
|   | ||||
| @@ -10,7 +10,6 @@ namespace Ocelot.UnitTests.ServiceDiscovery | ||||
|     public class ConfigurationServiceProviderTests | ||||
|     { | ||||
|         private ConfigurationServiceProvider _serviceProvider; | ||||
|         private HostAndPort _hostAndPort; | ||||
|         private List<Service> _result; | ||||
|         private List<Service> _expected; | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 geffzhang
					geffzhang