mirror of
https://github.com/nsnail/Ocelot.git
synced 2025-04-22 20:12:51 +08:00
Merge branch 'andreatosato-master'
This commit is contained in:
commit
def55b3c3c
@ -25,6 +25,7 @@ Here is an example ReRoute configuration, You don't need to set all of these thi
|
|||||||
"Get"
|
"Get"
|
||||||
],
|
],
|
||||||
"DownstreamHttpMethod": "",
|
"DownstreamHttpMethod": "",
|
||||||
|
"DownstreamHttpVersion": "",
|
||||||
"AddHeadersToRequest": {},
|
"AddHeadersToRequest": {},
|
||||||
"AddClaimsToRequest": {},
|
"AddClaimsToRequest": {},
|
||||||
"RouteClaimsRequirement": {},
|
"RouteClaimsRequirement": {},
|
||||||
@ -279,3 +280,8 @@ Registering a callback
|
|||||||
_callbackHolder.Dispose();
|
_callbackHolder.Dispose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DownstreamHttpVersion
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
Ocelot allows you to choose the HTTP version it will use to make the proxy request. It can be set as "1.0", "1.1" or "2.0".
|
@ -1,5 +1,6 @@
|
|||||||
using Ocelot.Configuration.Creator;
|
using Ocelot.Configuration.Creator;
|
||||||
using Ocelot.Values;
|
using Ocelot.Values;
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Net.Http;
|
using System.Net.Http;
|
||||||
@ -42,6 +43,7 @@ namespace Ocelot.Configuration.Builder
|
|||||||
private bool _dangerousAcceptAnyServerCertificateValidator;
|
private bool _dangerousAcceptAnyServerCertificateValidator;
|
||||||
private SecurityOptions _securityOptions;
|
private SecurityOptions _securityOptions;
|
||||||
private string _downstreamHttpMethod;
|
private string _downstreamHttpMethod;
|
||||||
|
private Version _downstreamHttpVersion;
|
||||||
|
|
||||||
public DownstreamReRouteBuilder()
|
public DownstreamReRouteBuilder()
|
||||||
{
|
{
|
||||||
@ -255,6 +257,12 @@ namespace Ocelot.Configuration.Builder
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public DownstreamReRouteBuilder WithDownstreamHttpVersion(Version downstreamHttpVersion)
|
||||||
|
{
|
||||||
|
_downstreamHttpVersion = downstreamHttpVersion;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public DownstreamReRoute Build()
|
public DownstreamReRoute Build()
|
||||||
{
|
{
|
||||||
return new DownstreamReRoute(
|
return new DownstreamReRoute(
|
||||||
@ -290,7 +298,8 @@ namespace Ocelot.Configuration.Builder
|
|||||||
_addHeadersToUpstream,
|
_addHeadersToUpstream,
|
||||||
_dangerousAcceptAnyServerCertificateValidator,
|
_dangerousAcceptAnyServerCertificateValidator,
|
||||||
_securityOptions,
|
_securityOptions,
|
||||||
_downstreamHttpMethod);
|
_downstreamHttpMethod,
|
||||||
|
_downstreamHttpVersion);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,13 +13,15 @@ namespace Ocelot.Configuration.Creator
|
|||||||
private readonly IHttpHandlerOptionsCreator _httpHandlerOptionsCreator;
|
private readonly IHttpHandlerOptionsCreator _httpHandlerOptionsCreator;
|
||||||
private readonly IAdministrationPath _adminPath;
|
private readonly IAdministrationPath _adminPath;
|
||||||
private readonly ILoadBalancerOptionsCreator _loadBalancerOptionsCreator;
|
private readonly ILoadBalancerOptionsCreator _loadBalancerOptionsCreator;
|
||||||
|
private readonly IVersionCreator _versionCreator;
|
||||||
|
|
||||||
public ConfigurationCreator(
|
public ConfigurationCreator(
|
||||||
IServiceProviderConfigurationCreator serviceProviderConfigCreator,
|
IServiceProviderConfigurationCreator serviceProviderConfigCreator,
|
||||||
IQoSOptionsCreator qosOptionsCreator,
|
IQoSOptionsCreator qosOptionsCreator,
|
||||||
IHttpHandlerOptionsCreator httpHandlerOptionsCreator,
|
IHttpHandlerOptionsCreator httpHandlerOptionsCreator,
|
||||||
IServiceProvider serviceProvider,
|
IServiceProvider serviceProvider,
|
||||||
ILoadBalancerOptionsCreator loadBalancerOptionsCreator
|
ILoadBalancerOptionsCreator loadBalancerOptionsCreator,
|
||||||
|
IVersionCreator versionCreator
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
_adminPath = serviceProvider.GetService<IAdministrationPath>();
|
_adminPath = serviceProvider.GetService<IAdministrationPath>();
|
||||||
@ -27,6 +29,7 @@ namespace Ocelot.Configuration.Creator
|
|||||||
_serviceProviderConfigCreator = serviceProviderConfigCreator;
|
_serviceProviderConfigCreator = serviceProviderConfigCreator;
|
||||||
_qosOptionsCreator = qosOptionsCreator;
|
_qosOptionsCreator = qosOptionsCreator;
|
||||||
_httpHandlerOptionsCreator = httpHandlerOptionsCreator;
|
_httpHandlerOptionsCreator = httpHandlerOptionsCreator;
|
||||||
|
_versionCreator = versionCreator;
|
||||||
}
|
}
|
||||||
|
|
||||||
public InternalConfiguration Create(FileConfiguration fileConfiguration, List<ReRoute> reRoutes)
|
public InternalConfiguration Create(FileConfiguration fileConfiguration, List<ReRoute> reRoutes)
|
||||||
@ -41,6 +44,8 @@ namespace Ocelot.Configuration.Creator
|
|||||||
|
|
||||||
var adminPath = _adminPath != null ? _adminPath.Path : null;
|
var adminPath = _adminPath != null ? _adminPath.Path : null;
|
||||||
|
|
||||||
|
var version = _versionCreator.Create(fileConfiguration.GlobalConfiguration.DownstreamHttpVersion);
|
||||||
|
|
||||||
return new InternalConfiguration(reRoutes,
|
return new InternalConfiguration(reRoutes,
|
||||||
adminPath,
|
adminPath,
|
||||||
serviceProviderConfiguration,
|
serviceProviderConfiguration,
|
||||||
@ -48,7 +53,8 @@ namespace Ocelot.Configuration.Creator
|
|||||||
lbOptions,
|
lbOptions,
|
||||||
fileConfiguration.GlobalConfiguration.DownstreamScheme,
|
fileConfiguration.GlobalConfiguration.DownstreamScheme,
|
||||||
qosOptions,
|
qosOptions,
|
||||||
httpHandlerOptions
|
httpHandlerOptions,
|
||||||
|
version
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,10 +8,12 @@ namespace Ocelot.Configuration.Creator
|
|||||||
public class DynamicsCreator : IDynamicsCreator
|
public class DynamicsCreator : IDynamicsCreator
|
||||||
{
|
{
|
||||||
private readonly IRateLimitOptionsCreator _rateLimitOptionsCreator;
|
private readonly IRateLimitOptionsCreator _rateLimitOptionsCreator;
|
||||||
|
private readonly IVersionCreator _versionCreator;
|
||||||
|
|
||||||
public DynamicsCreator(IRateLimitOptionsCreator rateLimitOptionsCreator)
|
public DynamicsCreator(IRateLimitOptionsCreator rateLimitOptionsCreator, IVersionCreator versionCreator)
|
||||||
{
|
{
|
||||||
_rateLimitOptionsCreator = rateLimitOptionsCreator;
|
_rateLimitOptionsCreator = rateLimitOptionsCreator;
|
||||||
|
_versionCreator = versionCreator;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<ReRoute> Create(FileConfiguration fileConfiguration)
|
public List<ReRoute> Create(FileConfiguration fileConfiguration)
|
||||||
@ -26,10 +28,13 @@ namespace Ocelot.Configuration.Creator
|
|||||||
var rateLimitOption = _rateLimitOptionsCreator
|
var rateLimitOption = _rateLimitOptionsCreator
|
||||||
.Create(fileDynamicReRoute.RateLimitRule, globalConfiguration);
|
.Create(fileDynamicReRoute.RateLimitRule, globalConfiguration);
|
||||||
|
|
||||||
|
var version = _versionCreator.Create(fileDynamicReRoute.DownstreamHttpVersion);
|
||||||
|
|
||||||
var downstreamReRoute = new DownstreamReRouteBuilder()
|
var downstreamReRoute = new DownstreamReRouteBuilder()
|
||||||
.WithEnableRateLimiting(rateLimitOption.EnableRateLimiting)
|
.WithEnableRateLimiting(rateLimitOption.EnableRateLimiting)
|
||||||
.WithRateLimitOptions(rateLimitOption)
|
.WithRateLimitOptions(rateLimitOption)
|
||||||
.WithServiceName(fileDynamicReRoute.ServiceName)
|
.WithServiceName(fileDynamicReRoute.ServiceName)
|
||||||
|
.WithDownstreamHttpVersion(version)
|
||||||
.Build();
|
.Build();
|
||||||
|
|
||||||
var reRoute = new ReRouteBuilder()
|
var reRoute = new ReRouteBuilder()
|
||||||
|
17
src/Ocelot/Configuration/Creator/HttpVersionCreator.cs
Normal file
17
src/Ocelot/Configuration/Creator/HttpVersionCreator.cs
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
namespace Ocelot.Configuration.Creator
|
||||||
|
{
|
||||||
|
using System;
|
||||||
|
|
||||||
|
public class HttpVersionCreator : IVersionCreator
|
||||||
|
{
|
||||||
|
public Version Create(string downstreamHttpVersion)
|
||||||
|
{
|
||||||
|
if (!Version.TryParse(downstreamHttpVersion, out Version version))
|
||||||
|
{
|
||||||
|
version = new Version(1, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return version;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
9
src/Ocelot/Configuration/Creator/IVersionCreator.cs
Normal file
9
src/Ocelot/Configuration/Creator/IVersionCreator.cs
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
namespace Ocelot.Configuration.Creator
|
||||||
|
{
|
||||||
|
using System;
|
||||||
|
|
||||||
|
public interface IVersionCreator
|
||||||
|
{
|
||||||
|
Version Create(string downstreamHttpVersion);
|
||||||
|
}
|
||||||
|
}
|
@ -22,6 +22,7 @@ namespace Ocelot.Configuration.Creator
|
|||||||
private readonly IDownstreamAddressesCreator _downstreamAddressesCreator;
|
private readonly IDownstreamAddressesCreator _downstreamAddressesCreator;
|
||||||
private readonly IReRouteKeyCreator _reRouteKeyCreator;
|
private readonly IReRouteKeyCreator _reRouteKeyCreator;
|
||||||
private readonly ISecurityOptionsCreator _securityOptionsCreator;
|
private readonly ISecurityOptionsCreator _securityOptionsCreator;
|
||||||
|
private readonly IVersionCreator _versionCreator;
|
||||||
|
|
||||||
public ReRoutesCreator(
|
public ReRoutesCreator(
|
||||||
IClaimsToThingCreator claimsToThingCreator,
|
IClaimsToThingCreator claimsToThingCreator,
|
||||||
@ -37,7 +38,8 @@ namespace Ocelot.Configuration.Creator
|
|||||||
IDownstreamAddressesCreator downstreamAddressesCreator,
|
IDownstreamAddressesCreator downstreamAddressesCreator,
|
||||||
ILoadBalancerOptionsCreator loadBalancerOptionsCreator,
|
ILoadBalancerOptionsCreator loadBalancerOptionsCreator,
|
||||||
IReRouteKeyCreator reRouteKeyCreator,
|
IReRouteKeyCreator reRouteKeyCreator,
|
||||||
ISecurityOptionsCreator securityOptionsCreator
|
ISecurityOptionsCreator securityOptionsCreator,
|
||||||
|
IVersionCreator versionCreator
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
_reRouteKeyCreator = reRouteKeyCreator;
|
_reRouteKeyCreator = reRouteKeyCreator;
|
||||||
@ -55,6 +57,7 @@ namespace Ocelot.Configuration.Creator
|
|||||||
_httpHandlerOptionsCreator = httpHandlerOptionsCreator;
|
_httpHandlerOptionsCreator = httpHandlerOptionsCreator;
|
||||||
_loadBalancerOptionsCreator = loadBalancerOptionsCreator;
|
_loadBalancerOptionsCreator = loadBalancerOptionsCreator;
|
||||||
_securityOptionsCreator = securityOptionsCreator;
|
_securityOptionsCreator = securityOptionsCreator;
|
||||||
|
_versionCreator = versionCreator;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<ReRoute> Create(FileConfiguration fileConfiguration)
|
public List<ReRoute> Create(FileConfiguration fileConfiguration)
|
||||||
@ -104,6 +107,8 @@ namespace Ocelot.Configuration.Creator
|
|||||||
|
|
||||||
var securityOptions = _securityOptionsCreator.Create(fileReRoute.SecurityOptions);
|
var securityOptions = _securityOptionsCreator.Create(fileReRoute.SecurityOptions);
|
||||||
|
|
||||||
|
var downstreamHttpVersion = _versionCreator.Create(fileReRoute.DownstreamHttpVersion);
|
||||||
|
|
||||||
var reRoute = new DownstreamReRouteBuilder()
|
var reRoute = new DownstreamReRouteBuilder()
|
||||||
.WithKey(fileReRoute.Key)
|
.WithKey(fileReRoute.Key)
|
||||||
.WithDownstreamPathTemplate(fileReRoute.DownstreamPathTemplate)
|
.WithDownstreamPathTemplate(fileReRoute.DownstreamPathTemplate)
|
||||||
@ -138,6 +143,7 @@ namespace Ocelot.Configuration.Creator
|
|||||||
.WithAddHeadersToUpstream(hAndRs.AddHeadersToUpstream)
|
.WithAddHeadersToUpstream(hAndRs.AddHeadersToUpstream)
|
||||||
.WithDangerousAcceptAnyServerCertificateValidator(fileReRoute.DangerousAcceptAnyServerCertificateValidator)
|
.WithDangerousAcceptAnyServerCertificateValidator(fileReRoute.DangerousAcceptAnyServerCertificateValidator)
|
||||||
.WithSecurityOptions(securityOptions)
|
.WithSecurityOptions(securityOptions)
|
||||||
|
.WithDownstreamHttpVersion(downstreamHttpVersion)
|
||||||
.WithDownStreamHttpMethod(fileReRoute.DownstreamHttpMethod)
|
.WithDownStreamHttpMethod(fileReRoute.DownstreamHttpMethod)
|
||||||
.Build();
|
.Build();
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
namespace Ocelot.Configuration
|
namespace Ocelot.Configuration
|
||||||
{
|
{
|
||||||
using Creator;
|
using Creator;
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Values;
|
using Values;
|
||||||
|
|
||||||
@ -39,7 +40,8 @@ namespace Ocelot.Configuration
|
|||||||
List<AddHeader> addHeadersToUpstream,
|
List<AddHeader> addHeadersToUpstream,
|
||||||
bool dangerousAcceptAnyServerCertificateValidator,
|
bool dangerousAcceptAnyServerCertificateValidator,
|
||||||
SecurityOptions securityOptions,
|
SecurityOptions securityOptions,
|
||||||
string downstreamHttpMethod)
|
string downstreamHttpMethod,
|
||||||
|
Version downstreamHttpVersion)
|
||||||
{
|
{
|
||||||
DangerousAcceptAnyServerCertificateValidator = dangerousAcceptAnyServerCertificateValidator;
|
DangerousAcceptAnyServerCertificateValidator = dangerousAcceptAnyServerCertificateValidator;
|
||||||
AddHeadersToDownstream = addHeadersToDownstream;
|
AddHeadersToDownstream = addHeadersToDownstream;
|
||||||
@ -74,6 +76,7 @@ namespace Ocelot.Configuration
|
|||||||
AddHeadersToUpstream = addHeadersToUpstream;
|
AddHeadersToUpstream = addHeadersToUpstream;
|
||||||
SecurityOptions = securityOptions;
|
SecurityOptions = securityOptions;
|
||||||
DownstreamHttpMethod = downstreamHttpMethod;
|
DownstreamHttpMethod = downstreamHttpMethod;
|
||||||
|
DownstreamHttpVersion = downstreamHttpVersion;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Key { get; }
|
public string Key { get; }
|
||||||
@ -109,5 +112,6 @@ namespace Ocelot.Configuration
|
|||||||
public bool DangerousAcceptAnyServerCertificateValidator { get; }
|
public bool DangerousAcceptAnyServerCertificateValidator { get; }
|
||||||
public SecurityOptions SecurityOptions { get; }
|
public SecurityOptions SecurityOptions { get; }
|
||||||
public string DownstreamHttpMethod { get; }
|
public string DownstreamHttpMethod { get; }
|
||||||
|
public Version DownstreamHttpVersion { get; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,5 +4,6 @@ namespace Ocelot.Configuration.File
|
|||||||
{
|
{
|
||||||
public string ServiceName { get; set; }
|
public string ServiceName { get; set; }
|
||||||
public FileRateLimitRule RateLimitRule { get; set; }
|
public FileRateLimitRule RateLimitRule { get; set; }
|
||||||
|
public string DownstreamHttpVersion { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -26,5 +26,7 @@
|
|||||||
public string DownstreamScheme { get; set; }
|
public string DownstreamScheme { get; set; }
|
||||||
|
|
||||||
public FileHttpHandlerOptions HttpHandlerOptions { get; set; }
|
public FileHttpHandlerOptions HttpHandlerOptions { get; set; }
|
||||||
|
|
||||||
|
public string DownstreamHttpVersion { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -56,5 +56,6 @@ namespace Ocelot.Configuration.File
|
|||||||
public int Timeout { get; set; }
|
public int Timeout { get; set; }
|
||||||
public bool DangerousAcceptAnyServerCertificateValidator { get; set; }
|
public bool DangerousAcceptAnyServerCertificateValidator { get; set; }
|
||||||
public FileSecurityOptions SecurityOptions { get; set; }
|
public FileSecurityOptions SecurityOptions { get; set; }
|
||||||
|
public string DownstreamHttpVersion { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,8 @@ using System.Collections.Generic;
|
|||||||
|
|
||||||
namespace Ocelot.Configuration
|
namespace Ocelot.Configuration
|
||||||
{
|
{
|
||||||
|
using System;
|
||||||
|
|
||||||
public interface IInternalConfiguration
|
public interface IInternalConfiguration
|
||||||
{
|
{
|
||||||
List<ReRoute> ReRoutes { get; }
|
List<ReRoute> ReRoutes { get; }
|
||||||
@ -19,5 +21,7 @@ namespace Ocelot.Configuration
|
|||||||
QoSOptions QoSOptions { get; }
|
QoSOptions QoSOptions { get; }
|
||||||
|
|
||||||
HttpHandlerOptions HttpHandlerOptions { get; }
|
HttpHandlerOptions HttpHandlerOptions { get; }
|
||||||
|
|
||||||
|
Version DownstreamHttpVersion { get; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,8 @@ using System.Collections.Generic;
|
|||||||
|
|
||||||
namespace Ocelot.Configuration
|
namespace Ocelot.Configuration
|
||||||
{
|
{
|
||||||
|
using System;
|
||||||
|
|
||||||
public class InternalConfiguration : IInternalConfiguration
|
public class InternalConfiguration : IInternalConfiguration
|
||||||
{
|
{
|
||||||
public InternalConfiguration(
|
public InternalConfiguration(
|
||||||
@ -12,7 +14,8 @@ namespace Ocelot.Configuration
|
|||||||
LoadBalancerOptions loadBalancerOptions,
|
LoadBalancerOptions loadBalancerOptions,
|
||||||
string downstreamScheme,
|
string downstreamScheme,
|
||||||
QoSOptions qoSOptions,
|
QoSOptions qoSOptions,
|
||||||
HttpHandlerOptions httpHandlerOptions)
|
HttpHandlerOptions httpHandlerOptions,
|
||||||
|
Version downstreamHttpVersion)
|
||||||
{
|
{
|
||||||
ReRoutes = reRoutes;
|
ReRoutes = reRoutes;
|
||||||
AdministrationPath = administrationPath;
|
AdministrationPath = administrationPath;
|
||||||
@ -22,6 +25,7 @@ namespace Ocelot.Configuration
|
|||||||
DownstreamScheme = downstreamScheme;
|
DownstreamScheme = downstreamScheme;
|
||||||
QoSOptions = qoSOptions;
|
QoSOptions = qoSOptions;
|
||||||
HttpHandlerOptions = httpHandlerOptions;
|
HttpHandlerOptions = httpHandlerOptions;
|
||||||
|
DownstreamHttpVersion = downstreamHttpVersion;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<ReRoute> ReRoutes { get; }
|
public List<ReRoute> ReRoutes { get; }
|
||||||
@ -32,5 +36,7 @@ namespace Ocelot.Configuration
|
|||||||
public string DownstreamScheme { get; }
|
public string DownstreamScheme { get; }
|
||||||
public QoSOptions QoSOptions { get; }
|
public QoSOptions QoSOptions { get; }
|
||||||
public HttpHandlerOptions HttpHandlerOptions { get; }
|
public HttpHandlerOptions HttpHandlerOptions { get; }
|
||||||
|
|
||||||
|
public Version DownstreamHttpVersion { get; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -83,6 +83,11 @@
|
|||||||
RuleForEach(reRoute => reRoute.DownstreamHostAndPorts)
|
RuleForEach(reRoute => reRoute.DownstreamHostAndPorts)
|
||||||
.SetValidator(hostAndPortValidator);
|
.SetValidator(hostAndPortValidator);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
When(reRoute => !string.IsNullOrEmpty(reRoute.DownstreamHttpVersion), () =>
|
||||||
|
{
|
||||||
|
RuleFor(r => r.DownstreamHttpVersion).Matches("^[0-9]([.,][0-9]{1,1})?$");
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<bool> IsSupportedAuthenticationProviders(FileAuthenticationOptions authenticationOptions, CancellationToken cancellationToken)
|
private async Task<bool> IsSupportedAuthenticationProviders(FileAuthenticationOptions authenticationOptions, CancellationToken cancellationToken)
|
||||||
|
@ -136,6 +136,7 @@ namespace Ocelot.DependencyInjection
|
|||||||
Services.TryAddSingleton<IFrameworkDescription, FrameworkDescription>();
|
Services.TryAddSingleton<IFrameworkDescription, FrameworkDescription>();
|
||||||
Services.TryAddSingleton<IQoSFactory, QoSFactory>();
|
Services.TryAddSingleton<IQoSFactory, QoSFactory>();
|
||||||
Services.TryAddSingleton<IExceptionToErrorMapper, HttpExeptionToErrorMapper>();
|
Services.TryAddSingleton<IExceptionToErrorMapper, HttpExeptionToErrorMapper>();
|
||||||
|
Services.TryAddSingleton<IVersionCreator, HttpVersionCreator>();
|
||||||
|
|
||||||
//add security
|
//add security
|
||||||
this.AddSecurity();
|
this.AddSecurity();
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
namespace Ocelot.DownstreamRouteFinder.Finder
|
namespace Ocelot.DownstreamRouteFinder.Finder
|
||||||
{
|
{
|
||||||
|
using System;
|
||||||
using Configuration;
|
using Configuration;
|
||||||
using Configuration.Builder;
|
using Configuration.Builder;
|
||||||
using Configuration.Creator;
|
using Configuration.Creator;
|
||||||
@ -54,6 +55,7 @@
|
|||||||
.WithQosOptions(qosOptions)
|
.WithQosOptions(qosOptions)
|
||||||
.WithDownstreamScheme(configuration.DownstreamScheme)
|
.WithDownstreamScheme(configuration.DownstreamScheme)
|
||||||
.WithLoadBalancerOptions(configuration.LoadBalancerOptions)
|
.WithLoadBalancerOptions(configuration.LoadBalancerOptions)
|
||||||
|
.WithDownstreamHttpVersion(configuration.DownstreamHttpVersion)
|
||||||
.WithUpstreamPathTemplate(upstreamPathTemplate);
|
.WithUpstreamPathTemplate(upstreamPathTemplate);
|
||||||
|
|
||||||
var rateLimitOptions = configuration.ReRoutes != null
|
var rateLimitOptions = configuration.ReRoutes != null
|
||||||
|
@ -24,7 +24,8 @@
|
|||||||
{
|
{
|
||||||
Content = await MapContent(request),
|
Content = await MapContent(request),
|
||||||
Method = MapMethod(request, downstreamReRoute),
|
Method = MapMethod(request, downstreamReRoute),
|
||||||
RequestUri = MapUri(request)
|
RequestUri = MapUri(request),
|
||||||
|
Version = downstreamReRoute.DownstreamHttpVersion,
|
||||||
};
|
};
|
||||||
|
|
||||||
MapHeaders(request, requestMessage);
|
MapHeaders(request, requestMessage);
|
||||||
|
243
test/Ocelot.AcceptanceTests/HttpTests.cs
Normal file
243
test/Ocelot.AcceptanceTests/HttpTests.cs
Normal file
@ -0,0 +1,243 @@
|
|||||||
|
namespace Ocelot.AcceptanceTests
|
||||||
|
{
|
||||||
|
using Microsoft.AspNetCore.Http;
|
||||||
|
using Ocelot.Configuration.File;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Net;
|
||||||
|
using System.Net.Http;
|
||||||
|
using Microsoft.AspNetCore.Server.Kestrel.Core;
|
||||||
|
using TestStack.BDDfy;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
public class HttpTests : IDisposable
|
||||||
|
{
|
||||||
|
private readonly Steps _steps;
|
||||||
|
private readonly ServiceHandler _serviceHandler;
|
||||||
|
|
||||||
|
public HttpTests()
|
||||||
|
{
|
||||||
|
_serviceHandler = new ServiceHandler();
|
||||||
|
_steps = new Steps();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void should_return_response_200_when_using_http_one()
|
||||||
|
{
|
||||||
|
const int port = 53219;
|
||||||
|
|
||||||
|
var configuration = new FileConfiguration
|
||||||
|
{
|
||||||
|
ReRoutes = new List<FileReRoute>
|
||||||
|
{
|
||||||
|
new FileReRoute
|
||||||
|
{
|
||||||
|
DownstreamPathTemplate = "/{url}",
|
||||||
|
DownstreamScheme = "https",
|
||||||
|
UpstreamPathTemplate = "/{url}",
|
||||||
|
UpstreamHttpMethod = new List<string> { "Get" },
|
||||||
|
DownstreamHostAndPorts = new List<FileHostAndPort>
|
||||||
|
{
|
||||||
|
new FileHostAndPort
|
||||||
|
{
|
||||||
|
Host = "localhost",
|
||||||
|
Port = port,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
DownstreamHttpMethod = "POST",
|
||||||
|
DownstreamHttpVersion = "1.0",
|
||||||
|
DangerousAcceptAnyServerCertificateValidator = true
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
this.Given(x => x.GivenThereIsAServiceRunningOn($"http://localhost:{port}/", "/", port, HttpProtocols.Http1))
|
||||||
|
.And(x => _steps.GivenThereIsAConfiguration(configuration))
|
||||||
|
.And(x => _steps.GivenOcelotIsRunning())
|
||||||
|
.When(x => _steps.WhenIGetUrlOnTheApiGateway("/"))
|
||||||
|
.Then(x => _steps.ThenTheStatusCodeShouldBe(HttpStatusCode.OK))
|
||||||
|
.BDDfy();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void should_return_response_200_when_using_http_one_point_one()
|
||||||
|
{
|
||||||
|
const int port = 53279;
|
||||||
|
|
||||||
|
var configuration = new FileConfiguration
|
||||||
|
{
|
||||||
|
ReRoutes = new List<FileReRoute>
|
||||||
|
{
|
||||||
|
new FileReRoute
|
||||||
|
{
|
||||||
|
DownstreamPathTemplate = "/{url}",
|
||||||
|
DownstreamScheme = "https",
|
||||||
|
UpstreamPathTemplate = "/{url}",
|
||||||
|
UpstreamHttpMethod = new List<string> { "Get" },
|
||||||
|
DownstreamHostAndPorts = new List<FileHostAndPort>
|
||||||
|
{
|
||||||
|
new FileHostAndPort
|
||||||
|
{
|
||||||
|
Host = "localhost",
|
||||||
|
Port = port,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
DownstreamHttpMethod = "POST",
|
||||||
|
DownstreamHttpVersion = "1.1",
|
||||||
|
DangerousAcceptAnyServerCertificateValidator = true
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
this.Given(x => x.GivenThereIsAServiceRunningOn($"http://localhost:{port}/", "/", port, HttpProtocols.Http1))
|
||||||
|
.And(x => _steps.GivenThereIsAConfiguration(configuration))
|
||||||
|
.And(x => _steps.GivenOcelotIsRunning())
|
||||||
|
.When(x => _steps.WhenIGetUrlOnTheApiGateway("/"))
|
||||||
|
.Then(x => _steps.ThenTheStatusCodeShouldBe(HttpStatusCode.OK))
|
||||||
|
.BDDfy();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void should_return_response_200_when_using_http_two_point_zero()
|
||||||
|
{
|
||||||
|
const int port = 53675;
|
||||||
|
|
||||||
|
var configuration = new FileConfiguration
|
||||||
|
{
|
||||||
|
ReRoutes = new List<FileReRoute>
|
||||||
|
{
|
||||||
|
new FileReRoute
|
||||||
|
{
|
||||||
|
DownstreamPathTemplate = "/{url}",
|
||||||
|
DownstreamScheme = "https",
|
||||||
|
UpstreamPathTemplate = "/{url}",
|
||||||
|
UpstreamHttpMethod = new List<string> { "Get" },
|
||||||
|
DownstreamHostAndPorts = new List<FileHostAndPort>
|
||||||
|
{
|
||||||
|
new FileHostAndPort
|
||||||
|
{
|
||||||
|
Host = "localhost",
|
||||||
|
Port = port,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
DownstreamHttpMethod = "POST",
|
||||||
|
DownstreamHttpVersion = "2.0",
|
||||||
|
DangerousAcceptAnyServerCertificateValidator = true
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const string expected = "here is some content";
|
||||||
|
var httpContent = new StringContent(expected);
|
||||||
|
|
||||||
|
this.Given(x => x.GivenThereIsAServiceRunningOn($"http://localhost:{port}/", "/", port, HttpProtocols.Http2))
|
||||||
|
.And(x => _steps.GivenThereIsAConfiguration(configuration))
|
||||||
|
.And(x => _steps.GivenOcelotIsRunning())
|
||||||
|
.When(x => _steps.WhenIGetUrlOnTheApiGateway("/", httpContent))
|
||||||
|
.Then(x => _steps.ThenTheStatusCodeShouldBe(HttpStatusCode.OK))
|
||||||
|
.And(_ => _steps.ThenTheResponseBodyShouldBe(expected))
|
||||||
|
.BDDfy();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void should_return_response_500_when_using_http_one_to_talk_to_server_running_http_two()
|
||||||
|
{
|
||||||
|
const int port = 53677;
|
||||||
|
|
||||||
|
var configuration = new FileConfiguration
|
||||||
|
{
|
||||||
|
ReRoutes = new List<FileReRoute>
|
||||||
|
{
|
||||||
|
new FileReRoute
|
||||||
|
{
|
||||||
|
DownstreamPathTemplate = "/{url}",
|
||||||
|
DownstreamScheme = "https",
|
||||||
|
UpstreamPathTemplate = "/{url}",
|
||||||
|
UpstreamHttpMethod = new List<string> { "Get" },
|
||||||
|
DownstreamHostAndPorts = new List<FileHostAndPort>
|
||||||
|
{
|
||||||
|
new FileHostAndPort
|
||||||
|
{
|
||||||
|
Host = "localhost",
|
||||||
|
Port = port,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
DownstreamHttpMethod = "POST",
|
||||||
|
DownstreamHttpVersion = "1.1",
|
||||||
|
DangerousAcceptAnyServerCertificateValidator = true
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const string expected = "here is some content";
|
||||||
|
var httpContent = new StringContent(expected);
|
||||||
|
|
||||||
|
this.Given(x => x.GivenThereIsAServiceRunningOn($"http://localhost:{port}/", "/", port, HttpProtocols.Http2))
|
||||||
|
.And(x => _steps.GivenThereIsAConfiguration(configuration))
|
||||||
|
.And(x => _steps.GivenOcelotIsRunning())
|
||||||
|
.When(x => _steps.WhenIGetUrlOnTheApiGateway("/", httpContent))
|
||||||
|
.Then(x => _steps.ThenTheStatusCodeShouldBe(HttpStatusCode.InternalServerError))
|
||||||
|
.BDDfy();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void should_return_response_200_when_using_http_two_to_talk_to_server_running_http_one_point_one()
|
||||||
|
{
|
||||||
|
const int port = 53679;
|
||||||
|
|
||||||
|
var configuration = new FileConfiguration
|
||||||
|
{
|
||||||
|
ReRoutes = new List<FileReRoute>
|
||||||
|
{
|
||||||
|
new FileReRoute
|
||||||
|
{
|
||||||
|
DownstreamPathTemplate = "/{url}",
|
||||||
|
DownstreamScheme = "https",
|
||||||
|
UpstreamPathTemplate = "/{url}",
|
||||||
|
UpstreamHttpMethod = new List<string> { "Get" },
|
||||||
|
DownstreamHostAndPorts = new List<FileHostAndPort>
|
||||||
|
{
|
||||||
|
new FileHostAndPort
|
||||||
|
{
|
||||||
|
Host = "localhost",
|
||||||
|
Port = port,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
DownstreamHttpMethod = "POST",
|
||||||
|
DownstreamHttpVersion = "2.0",
|
||||||
|
DangerousAcceptAnyServerCertificateValidator = true
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const string expected = "here is some content";
|
||||||
|
var httpContent = new StringContent(expected);
|
||||||
|
|
||||||
|
this.Given(x => x.GivenThereIsAServiceRunningOn($"http://localhost:{port}/", "/", port, HttpProtocols.Http1))
|
||||||
|
.And(x => _steps.GivenThereIsAConfiguration(configuration))
|
||||||
|
.And(x => _steps.GivenOcelotIsRunning())
|
||||||
|
.When(x => _steps.WhenIGetUrlOnTheApiGateway("/", httpContent))
|
||||||
|
.Then(x => _steps.ThenTheStatusCodeShouldBe(HttpStatusCode.OK))
|
||||||
|
.And(_ => _steps.ThenTheResponseBodyShouldBe(expected))
|
||||||
|
.BDDfy();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void GivenThereIsAServiceRunningOn(string baseUrl, string basePath, int port, HttpProtocols protocols)
|
||||||
|
{
|
||||||
|
_serviceHandler.GivenThereIsAServiceRunningOn(baseUrl, basePath, async context =>
|
||||||
|
{
|
||||||
|
context.Response.StatusCode = 200;
|
||||||
|
var reader = new StreamReader(context.Request.Body);
|
||||||
|
var body = await reader.ReadToEndAsync();
|
||||||
|
await context.Response.WriteAsync(body);
|
||||||
|
}, port, protocols);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
_serviceHandler.Dispose();
|
||||||
|
_steps.Dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -27,7 +27,7 @@ namespace Ocelot.AcceptanceTests
|
|||||||
public void should_load_balance_request_with_least_connection()
|
public void should_load_balance_request_with_least_connection()
|
||||||
{
|
{
|
||||||
int portOne = 50591;
|
int portOne = 50591;
|
||||||
int portTwo = 51482;
|
int portTwo = 54483;
|
||||||
|
|
||||||
var downstreamServiceOneUrl = $"http://localhost:{portOne}";
|
var downstreamServiceOneUrl = $"http://localhost:{portOne}";
|
||||||
var downstreamServiceTwoUrl = $"http://localhost:{portTwo}";
|
var downstreamServiceTwoUrl = $"http://localhost:{portTwo}";
|
||||||
|
@ -6,9 +6,11 @@
|
|||||||
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Configuration;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using System;
|
using System;
|
||||||
|
using System.ComponentModel;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Server.Kestrel.Core;
|
||||||
|
|
||||||
public class ServiceHandler : IDisposable
|
public class ServiceHandler : IDisposable
|
||||||
{
|
{
|
||||||
@ -47,6 +49,31 @@
|
|||||||
_builder.Start();
|
_builder.Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void GivenThereIsAServiceRunningOn(string baseUrl, string basePath, RequestDelegate del, int port, HttpProtocols protocols)
|
||||||
|
{
|
||||||
|
_builder = new WebHostBuilder()
|
||||||
|
.UseUrls(baseUrl)
|
||||||
|
.UseKestrel()
|
||||||
|
.ConfigureKestrel(serverOptions =>
|
||||||
|
{
|
||||||
|
serverOptions.Listen(IPAddress.Loopback, port, listenOptions =>
|
||||||
|
{
|
||||||
|
listenOptions.UseHttps("idsrv3test.pfx", "idsrv3test");
|
||||||
|
listenOptions.Protocols = protocols;
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.UseContentRoot(Directory.GetCurrentDirectory())
|
||||||
|
.UseIISIntegration()
|
||||||
|
.Configure(app =>
|
||||||
|
{
|
||||||
|
app.UsePathBase(basePath);
|
||||||
|
app.Run(del);
|
||||||
|
})
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
_builder.Start();
|
||||||
|
}
|
||||||
|
|
||||||
public void GivenThereIsAServiceRunningOn(string baseUrl, string basePath, string fileName, string password, int port, RequestDelegate del)
|
public void GivenThereIsAServiceRunningOn(string baseUrl, string basePath, string fileName, string password, int port, RequestDelegate del)
|
||||||
{
|
{
|
||||||
_builder = new WebHostBuilder()
|
_builder = new WebHostBuilder()
|
||||||
|
@ -392,6 +392,7 @@ namespace Ocelot.AcceptanceTests
|
|||||||
_ocelotServer = new TestServer(_webHostBuilder);
|
_ocelotServer = new TestServer(_webHostBuilder);
|
||||||
|
|
||||||
_ocelotClient = _ocelotServer.CreateClient();
|
_ocelotClient = _ocelotServer.CreateClient();
|
||||||
|
Thread.Sleep(1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void WhenIGetUrlOnTheApiGatewayWaitingForTheResponseToBeOk(string url)
|
public void WhenIGetUrlOnTheApiGatewayWaitingForTheResponseToBeOk(string url)
|
||||||
|
@ -59,7 +59,7 @@ namespace Ocelot.Benchmarks
|
|||||||
|
|
||||||
_downstreamContext = new DownstreamContext(httpContext)
|
_downstreamContext = new DownstreamContext(httpContext)
|
||||||
{
|
{
|
||||||
Configuration = new InternalConfiguration(new List<ReRoute>(), null, null, null, null, null, null, null)
|
Configuration = new InternalConfiguration(new List<ReRoute>(), null, null, null, null, null, null, null, null)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@ namespace Ocelot.UnitTests.Configuration
|
|||||||
private readonly Mock<IQoSOptionsCreator> _qosCreator;
|
private readonly Mock<IQoSOptionsCreator> _qosCreator;
|
||||||
private readonly Mock<IHttpHandlerOptionsCreator> _hhoCreator;
|
private readonly Mock<IHttpHandlerOptionsCreator> _hhoCreator;
|
||||||
private readonly Mock<ILoadBalancerOptionsCreator> _lboCreator;
|
private readonly Mock<ILoadBalancerOptionsCreator> _lboCreator;
|
||||||
|
private readonly Mock<IVersionCreator> _vCreator;
|
||||||
private FileConfiguration _fileConfig;
|
private FileConfiguration _fileConfig;
|
||||||
private List<ReRoute> _reRoutes;
|
private List<ReRoute> _reRoutes;
|
||||||
private ServiceProviderConfiguration _spc;
|
private ServiceProviderConfiguration _spc;
|
||||||
@ -30,6 +31,7 @@ namespace Ocelot.UnitTests.Configuration
|
|||||||
|
|
||||||
public ConfigurationCreatorTests()
|
public ConfigurationCreatorTests()
|
||||||
{
|
{
|
||||||
|
_vCreator = new Mock<IVersionCreator>();
|
||||||
_lboCreator = new Mock<ILoadBalancerOptionsCreator>();
|
_lboCreator = new Mock<ILoadBalancerOptionsCreator>();
|
||||||
_hhoCreator = new Mock<IHttpHandlerOptionsCreator>();
|
_hhoCreator = new Mock<IHttpHandlerOptionsCreator>();
|
||||||
_qosCreator = new Mock<IQoSOptionsCreator>();
|
_qosCreator = new Mock<IQoSOptionsCreator>();
|
||||||
@ -117,7 +119,7 @@ namespace Ocelot.UnitTests.Configuration
|
|||||||
private void WhenICreate()
|
private void WhenICreate()
|
||||||
{
|
{
|
||||||
var serviceProvider = _serviceCollection.BuildServiceProvider();
|
var serviceProvider = _serviceCollection.BuildServiceProvider();
|
||||||
_creator = new ConfigurationCreator(_spcCreator.Object, _qosCreator.Object, _hhoCreator.Object, serviceProvider, _lboCreator.Object);
|
_creator = new ConfigurationCreator(_spcCreator.Object, _qosCreator.Object, _hhoCreator.Object, serviceProvider, _lboCreator.Object, _vCreator.Object);
|
||||||
_result = _creator.Create(_fileConfig, _reRoutes);
|
_result = _creator.Create(_fileConfig, _reRoutes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
namespace Ocelot.UnitTests.Configuration
|
namespace Ocelot.UnitTests.Configuration
|
||||||
{
|
{
|
||||||
|
using System;
|
||||||
using Moq;
|
using Moq;
|
||||||
using Ocelot.Configuration;
|
using Ocelot.Configuration;
|
||||||
using Ocelot.Configuration.Builder;
|
using Ocelot.Configuration.Builder;
|
||||||
@ -14,15 +15,18 @@
|
|||||||
{
|
{
|
||||||
private readonly DynamicsCreator _creator;
|
private readonly DynamicsCreator _creator;
|
||||||
private readonly Mock<IRateLimitOptionsCreator> _rloCreator;
|
private readonly Mock<IRateLimitOptionsCreator> _rloCreator;
|
||||||
|
private readonly Mock<IVersionCreator> _versionCreator;
|
||||||
private List<ReRoute> _result;
|
private List<ReRoute> _result;
|
||||||
private FileConfiguration _fileConfig;
|
private FileConfiguration _fileConfig;
|
||||||
private RateLimitOptions _rlo1;
|
private RateLimitOptions _rlo1;
|
||||||
private RateLimitOptions _rlo2;
|
private RateLimitOptions _rlo2;
|
||||||
|
private Version _version;
|
||||||
|
|
||||||
public DynamicsCreatorTests()
|
public DynamicsCreatorTests()
|
||||||
{
|
{
|
||||||
|
_versionCreator = new Mock<IVersionCreator>();
|
||||||
_rloCreator = new Mock<IRateLimitOptionsCreator>();
|
_rloCreator = new Mock<IRateLimitOptionsCreator>();
|
||||||
_creator = new DynamicsCreator(_rloCreator.Object);
|
_creator = new DynamicsCreator(_rloCreator.Object, _versionCreator.Object);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
@ -50,7 +54,8 @@
|
|||||||
RateLimitRule = new FileRateLimitRule
|
RateLimitRule = new FileRateLimitRule
|
||||||
{
|
{
|
||||||
EnableRateLimiting = false
|
EnableRateLimiting = false
|
||||||
}
|
},
|
||||||
|
DownstreamHttpVersion = "1.1"
|
||||||
},
|
},
|
||||||
new FileDynamicReRoute
|
new FileDynamicReRoute
|
||||||
{
|
{
|
||||||
@ -58,16 +63,19 @@
|
|||||||
RateLimitRule = new FileRateLimitRule
|
RateLimitRule = new FileRateLimitRule
|
||||||
{
|
{
|
||||||
EnableRateLimiting = true
|
EnableRateLimiting = true
|
||||||
}
|
},
|
||||||
|
DownstreamHttpVersion = "2.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
this.Given(_ => GivenThe(fileConfig))
|
this.Given(_ => GivenThe(fileConfig))
|
||||||
.And(_ => GivenTheRloCreatorReturns())
|
.And(_ => GivenTheRloCreatorReturns())
|
||||||
|
.And(_ => GivenTheVersionCreatorReturns())
|
||||||
.When(_ => WhenICreate())
|
.When(_ => WhenICreate())
|
||||||
.Then(_ => ThenTheReRoutesAreReturned())
|
.Then(_ => ThenTheReRoutesAreReturned())
|
||||||
.And(_ => ThenTheRloCreatorIsCalledCorrectly())
|
.And(_ => ThenTheRloCreatorIsCalledCorrectly())
|
||||||
|
.And(_ => ThenTheVersionCreatorIsCalledCorrectly())
|
||||||
.BDDfy();
|
.BDDfy();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -80,18 +88,32 @@
|
|||||||
_fileConfig.GlobalConfiguration), Times.Once);
|
_fileConfig.GlobalConfiguration), Times.Once);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void ThenTheVersionCreatorIsCalledCorrectly()
|
||||||
|
{
|
||||||
|
_versionCreator.Verify(x => x.Create(_fileConfig.DynamicReRoutes[0].DownstreamHttpVersion), Times.Once);
|
||||||
|
_versionCreator.Verify(x => x.Create(_fileConfig.DynamicReRoutes[1].DownstreamHttpVersion), Times.Once);
|
||||||
|
}
|
||||||
|
|
||||||
private void ThenTheReRoutesAreReturned()
|
private void ThenTheReRoutesAreReturned()
|
||||||
{
|
{
|
||||||
_result.Count.ShouldBe(2);
|
_result.Count.ShouldBe(2);
|
||||||
_result[0].DownstreamReRoute[0].EnableEndpointEndpointRateLimiting.ShouldBeFalse();
|
_result[0].DownstreamReRoute[0].EnableEndpointEndpointRateLimiting.ShouldBeFalse();
|
||||||
_result[0].DownstreamReRoute[0].RateLimitOptions.ShouldBe(_rlo1);
|
_result[0].DownstreamReRoute[0].RateLimitOptions.ShouldBe(_rlo1);
|
||||||
|
_result[0].DownstreamReRoute[0].DownstreamHttpVersion.ShouldBe(_version);
|
||||||
_result[0].DownstreamReRoute[0].ServiceName.ShouldBe(_fileConfig.DynamicReRoutes[0].ServiceName);
|
_result[0].DownstreamReRoute[0].ServiceName.ShouldBe(_fileConfig.DynamicReRoutes[0].ServiceName);
|
||||||
|
|
||||||
_result[1].DownstreamReRoute[0].EnableEndpointEndpointRateLimiting.ShouldBeTrue();
|
_result[1].DownstreamReRoute[0].EnableEndpointEndpointRateLimiting.ShouldBeTrue();
|
||||||
_result[1].DownstreamReRoute[0].RateLimitOptions.ShouldBe(_rlo2);
|
_result[1].DownstreamReRoute[0].RateLimitOptions.ShouldBe(_rlo2);
|
||||||
|
_result[1].DownstreamReRoute[0].DownstreamHttpVersion.ShouldBe(_version);
|
||||||
_result[1].DownstreamReRoute[0].ServiceName.ShouldBe(_fileConfig.DynamicReRoutes[1].ServiceName);
|
_result[1].DownstreamReRoute[0].ServiceName.ShouldBe(_fileConfig.DynamicReRoutes[1].ServiceName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void GivenTheVersionCreatorReturns()
|
||||||
|
{
|
||||||
|
_version = new Version("1.1");
|
||||||
|
_versionCreator.Setup(x => x.Create(It.IsAny<string>())).Returns(_version);
|
||||||
|
}
|
||||||
|
|
||||||
private void GivenTheRloCreatorReturns()
|
private void GivenTheRloCreatorReturns()
|
||||||
{
|
{
|
||||||
_rlo1 = new RateLimitOptionsBuilder().Build();
|
_rlo1 = new RateLimitOptionsBuilder().Build();
|
||||||
|
@ -15,6 +15,8 @@ using Xunit;
|
|||||||
|
|
||||||
namespace Ocelot.UnitTests.Configuration
|
namespace Ocelot.UnitTests.Configuration
|
||||||
{
|
{
|
||||||
|
using System;
|
||||||
|
|
||||||
public class FileConfigurationSetterTests
|
public class FileConfigurationSetterTests
|
||||||
{
|
{
|
||||||
private FileConfiguration _fileConfiguration;
|
private FileConfiguration _fileConfiguration;
|
||||||
@ -38,7 +40,7 @@ namespace Ocelot.UnitTests.Configuration
|
|||||||
{
|
{
|
||||||
var fileConfig = new FileConfiguration();
|
var fileConfig = new FileConfiguration();
|
||||||
var serviceProviderConfig = new ServiceProviderConfigurationBuilder().Build();
|
var serviceProviderConfig = new ServiceProviderConfigurationBuilder().Build();
|
||||||
var config = new InternalConfiguration(new List<ReRoute>(), string.Empty, serviceProviderConfig, "asdf", new LoadBalancerOptionsBuilder().Build(), "", new QoSOptionsBuilder().Build(), new HttpHandlerOptionsBuilder().Build());
|
var config = new InternalConfiguration(new List<ReRoute>(), string.Empty, serviceProviderConfig, "asdf", new LoadBalancerOptionsBuilder().Build(), "", new QoSOptionsBuilder().Build(), new HttpHandlerOptionsBuilder().Build(), new Version("1.1"));
|
||||||
|
|
||||||
this.Given(x => GivenTheFollowingConfiguration(fileConfig))
|
this.Given(x => GivenTheFollowingConfiguration(fileConfig))
|
||||||
.And(x => GivenTheRepoReturns(new OkResponse()))
|
.And(x => GivenTheRepoReturns(new OkResponse()))
|
||||||
|
@ -87,7 +87,7 @@
|
|||||||
_reRoutes = new List<ReRoute> { new ReRouteBuilder().Build() };
|
_reRoutes = new List<ReRoute> { new ReRouteBuilder().Build() };
|
||||||
_aggregates = new List<ReRoute> { new ReRouteBuilder().Build() };
|
_aggregates = new List<ReRoute> { new ReRouteBuilder().Build() };
|
||||||
_dynamics = new List<ReRoute> { new ReRouteBuilder().Build() };
|
_dynamics = new List<ReRoute> { new ReRouteBuilder().Build() };
|
||||||
_internalConfig = new InternalConfiguration(null, "", null, "", null, "", null, null);
|
_internalConfig = new InternalConfiguration(null, "", null, "", null, "", null, null, null);
|
||||||
|
|
||||||
_reRoutesCreator.Setup(x => x.Create(It.IsAny<FileConfiguration>())).Returns(_reRoutes);
|
_reRoutesCreator.Setup(x => x.Create(It.IsAny<FileConfiguration>())).Returns(_reRoutes);
|
||||||
_aggregatesCreator.Setup(x => x.Create(It.IsAny<FileConfiguration>(), It.IsAny<List<ReRoute>>())).Returns(_aggregates);
|
_aggregatesCreator.Setup(x => x.Create(It.IsAny<FileConfiguration>(), It.IsAny<List<ReRoute>>())).Returns(_aggregates);
|
||||||
|
@ -120,6 +120,7 @@ namespace Ocelot.UnitTests.Configuration
|
|||||||
public string DownstreamScheme { get; }
|
public string DownstreamScheme { get; }
|
||||||
public QoSOptions QoSOptions { get; }
|
public QoSOptions QoSOptions { get; }
|
||||||
public HttpHandlerOptions HttpHandlerOptions { get; }
|
public HttpHandlerOptions HttpHandlerOptions { get; }
|
||||||
|
public Version DownstreamHttpVersion { get; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
namespace Ocelot.UnitTests.Configuration
|
namespace Ocelot.UnitTests.Configuration
|
||||||
{
|
{
|
||||||
|
using System;
|
||||||
using Moq;
|
using Moq;
|
||||||
using Ocelot.Cache;
|
using Ocelot.Cache;
|
||||||
using Ocelot.Configuration;
|
using Ocelot.Configuration;
|
||||||
@ -30,6 +31,7 @@
|
|||||||
private Mock<ILoadBalancerOptionsCreator> _lboCreator;
|
private Mock<ILoadBalancerOptionsCreator> _lboCreator;
|
||||||
private Mock<IReRouteKeyCreator> _rrkCreator;
|
private Mock<IReRouteKeyCreator> _rrkCreator;
|
||||||
private Mock<ISecurityOptionsCreator> _soCreator;
|
private Mock<ISecurityOptionsCreator> _soCreator;
|
||||||
|
private Mock<IVersionCreator> _versionCreator;
|
||||||
private FileConfiguration _fileConfig;
|
private FileConfiguration _fileConfig;
|
||||||
private ReRouteOptions _rro;
|
private ReRouteOptions _rro;
|
||||||
private string _requestId;
|
private string _requestId;
|
||||||
@ -46,6 +48,7 @@
|
|||||||
private LoadBalancerOptions _lbo;
|
private LoadBalancerOptions _lbo;
|
||||||
private List<ReRoute> _result;
|
private List<ReRoute> _result;
|
||||||
private SecurityOptions _securityOptions;
|
private SecurityOptions _securityOptions;
|
||||||
|
private Version _expectedVersion;
|
||||||
|
|
||||||
public ReRoutesCreatorTests()
|
public ReRoutesCreatorTests()
|
||||||
{
|
{
|
||||||
@ -63,6 +66,7 @@
|
|||||||
_lboCreator = new Mock<ILoadBalancerOptionsCreator>();
|
_lboCreator = new Mock<ILoadBalancerOptionsCreator>();
|
||||||
_rrkCreator = new Mock<IReRouteKeyCreator>();
|
_rrkCreator = new Mock<IReRouteKeyCreator>();
|
||||||
_soCreator = new Mock<ISecurityOptionsCreator>();
|
_soCreator = new Mock<ISecurityOptionsCreator>();
|
||||||
|
_versionCreator = new Mock<IVersionCreator>();
|
||||||
|
|
||||||
_creator = new ReRoutesCreator(
|
_creator = new ReRoutesCreator(
|
||||||
_cthCreator.Object,
|
_cthCreator.Object,
|
||||||
@ -78,7 +82,8 @@
|
|||||||
_daCreator.Object,
|
_daCreator.Object,
|
||||||
_lboCreator.Object,
|
_lboCreator.Object,
|
||||||
_rrkCreator.Object,
|
_rrkCreator.Object,
|
||||||
_soCreator.Object
|
_soCreator.Object,
|
||||||
|
_versionCreator.Object
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -155,6 +160,7 @@
|
|||||||
|
|
||||||
private void GivenTheDependenciesAreSetUpCorrectly()
|
private void GivenTheDependenciesAreSetUpCorrectly()
|
||||||
{
|
{
|
||||||
|
_expectedVersion = new Version("1.1");
|
||||||
_rro = new ReRouteOptions(false, false, false, false, false);
|
_rro = new ReRouteOptions(false, false, false, false, false);
|
||||||
_requestId = "testy";
|
_requestId = "testy";
|
||||||
_rrk = "besty";
|
_rrk = "besty";
|
||||||
@ -182,6 +188,7 @@
|
|||||||
_hfarCreator.Setup(x => x.Create(It.IsAny<FileReRoute>())).Returns(_ht);
|
_hfarCreator.Setup(x => x.Create(It.IsAny<FileReRoute>())).Returns(_ht);
|
||||||
_daCreator.Setup(x => x.Create(It.IsAny<FileReRoute>())).Returns(_dhp);
|
_daCreator.Setup(x => x.Create(It.IsAny<FileReRoute>())).Returns(_dhp);
|
||||||
_lboCreator.Setup(x => x.Create(It.IsAny<FileLoadBalancerOptions>())).Returns(_lbo);
|
_lboCreator.Setup(x => x.Create(It.IsAny<FileLoadBalancerOptions>())).Returns(_lbo);
|
||||||
|
_versionCreator.Setup(x => x.Create(It.IsAny<string>())).Returns(_expectedVersion);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ThenTheReRoutesAreCreated()
|
private void ThenTheReRoutesAreCreated()
|
||||||
@ -209,6 +216,7 @@
|
|||||||
|
|
||||||
private void ThenTheReRouteIsSet(FileReRoute expected, int reRouteIndex)
|
private void ThenTheReRouteIsSet(FileReRoute expected, int reRouteIndex)
|
||||||
{
|
{
|
||||||
|
_result[reRouteIndex].DownstreamReRoute[0].DownstreamHttpVersion.ShouldBe(_expectedVersion);
|
||||||
_result[reRouteIndex].DownstreamReRoute[0].IsAuthenticated.ShouldBe(_rro.IsAuthenticated);
|
_result[reRouteIndex].DownstreamReRoute[0].IsAuthenticated.ShouldBe(_rro.IsAuthenticated);
|
||||||
_result[reRouteIndex].DownstreamReRoute[0].IsAuthorised.ShouldBe(_rro.IsAuthorised);
|
_result[reRouteIndex].DownstreamReRoute[0].IsAuthorised.ShouldBe(_rro.IsAuthorised);
|
||||||
_result[reRouteIndex].DownstreamReRoute[0].IsCached.ShouldBe(_rro.IsCached);
|
_result[reRouteIndex].DownstreamReRoute[0].IsCached.ShouldBe(_rro.IsCached);
|
||||||
|
@ -305,6 +305,71 @@
|
|||||||
.BDDfy();
|
.BDDfy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Theory]
|
||||||
|
[InlineData("1.0")]
|
||||||
|
[InlineData("1.1")]
|
||||||
|
[InlineData("2.0")]
|
||||||
|
[InlineData("1,0")]
|
||||||
|
[InlineData("1,1")]
|
||||||
|
[InlineData("2,0")]
|
||||||
|
[InlineData("1")]
|
||||||
|
[InlineData("2")]
|
||||||
|
[InlineData("")]
|
||||||
|
[InlineData(null)]
|
||||||
|
public void should_be_valid_re_route_using_downstream_http_version(string version)
|
||||||
|
{
|
||||||
|
var fileReRoute = new FileReRoute
|
||||||
|
{
|
||||||
|
DownstreamPathTemplate = "/test",
|
||||||
|
UpstreamPathTemplate = "/test",
|
||||||
|
DownstreamHostAndPorts = new List<FileHostAndPort>
|
||||||
|
{
|
||||||
|
new FileHostAndPort
|
||||||
|
{
|
||||||
|
Host = "localhost",
|
||||||
|
Port = 5000,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
DownstreamHttpVersion = version,
|
||||||
|
};
|
||||||
|
|
||||||
|
this.Given(_ => GivenThe(fileReRoute))
|
||||||
|
.When(_ => WhenIValidate())
|
||||||
|
.Then(_ => ThenTheResultIsValid())
|
||||||
|
.BDDfy();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Theory]
|
||||||
|
[InlineData("retg1.1")]
|
||||||
|
[InlineData("re2.0")]
|
||||||
|
[InlineData("1,0a")]
|
||||||
|
[InlineData("a1,1")]
|
||||||
|
[InlineData("12,0")]
|
||||||
|
[InlineData("asdf")]
|
||||||
|
public void should_be_invalid_re_route_using_downstream_http_version(string version)
|
||||||
|
{
|
||||||
|
var fileReRoute = new FileReRoute
|
||||||
|
{
|
||||||
|
DownstreamPathTemplate = "/test",
|
||||||
|
UpstreamPathTemplate = "/test",
|
||||||
|
DownstreamHostAndPorts = new List<FileHostAndPort>
|
||||||
|
{
|
||||||
|
new FileHostAndPort
|
||||||
|
{
|
||||||
|
Host = "localhost",
|
||||||
|
Port = 5000,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
DownstreamHttpVersion = version,
|
||||||
|
};
|
||||||
|
|
||||||
|
this.Given(_ => GivenThe(fileReRoute))
|
||||||
|
.When(_ => WhenIValidate())
|
||||||
|
.Then(_ => ThenTheResultIsInvalid())
|
||||||
|
.And(_ => ThenTheErrorsContains("'Downstream Http Version' is not in the correct format."))
|
||||||
|
.BDDfy();
|
||||||
|
}
|
||||||
|
|
||||||
private void GivenAnAuthProvider(string key)
|
private void GivenAnAuthProvider(string key)
|
||||||
{
|
{
|
||||||
var schemes = new List<AuthenticationScheme>
|
var schemes = new List<AuthenticationScheme>
|
||||||
|
54
test/Ocelot.UnitTests/Configuration/VersionCreatorTests.cs
Normal file
54
test/Ocelot.UnitTests/Configuration/VersionCreatorTests.cs
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
namespace Ocelot.UnitTests.Configuration
|
||||||
|
{
|
||||||
|
using System;
|
||||||
|
using Ocelot.Configuration.Creator;
|
||||||
|
using Shouldly;
|
||||||
|
using TestStack.BDDfy;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
public class VersionCreatorTests
|
||||||
|
{
|
||||||
|
private readonly HttpVersionCreator _creator;
|
||||||
|
private string _input;
|
||||||
|
private Version _result;
|
||||||
|
|
||||||
|
public VersionCreatorTests()
|
||||||
|
{
|
||||||
|
_creator = new HttpVersionCreator();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void should_create_version_based_on_input()
|
||||||
|
{
|
||||||
|
this.Given(_ => GivenTheInput("2.0"))
|
||||||
|
.When(_ => WhenICreate())
|
||||||
|
.Then(_ => ThenTheResultIs(2, 0))
|
||||||
|
.BDDfy();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void should_default_to_version_one_point_one()
|
||||||
|
{
|
||||||
|
this.Given(_ => GivenTheInput(""))
|
||||||
|
.When(_ => WhenICreate())
|
||||||
|
.Then(_ => ThenTheResultIs(1, 1))
|
||||||
|
.BDDfy();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void GivenTheInput(string input)
|
||||||
|
{
|
||||||
|
_input = input;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void WhenICreate()
|
||||||
|
{
|
||||||
|
_result = _creator.Create(_input);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ThenTheResultIs(int major, int minor)
|
||||||
|
{
|
||||||
|
_result.Major.ShouldBe(major);
|
||||||
|
_result.Minor.ShouldBe(minor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,5 +1,6 @@
|
|||||||
namespace Ocelot.UnitTests.DownstreamRouteFinder
|
namespace Ocelot.UnitTests.DownstreamRouteFinder
|
||||||
{
|
{
|
||||||
|
using System;
|
||||||
using Moq;
|
using Moq;
|
||||||
using Ocelot.Configuration;
|
using Ocelot.Configuration;
|
||||||
using Ocelot.Configuration.Builder;
|
using Ocelot.Configuration.Builder;
|
||||||
@ -44,7 +45,7 @@ namespace Ocelot.UnitTests.DownstreamRouteFinder
|
|||||||
[Fact]
|
[Fact]
|
||||||
public void should_create_downstream_route()
|
public void should_create_downstream_route()
|
||||||
{
|
{
|
||||||
var configuration = new InternalConfiguration(null, "doesnt matter", null, "doesnt matter", _loadBalancerOptions, "http", _qoSOptions, _handlerOptions);
|
var configuration = new InternalConfiguration(null, "doesnt matter", null, "doesnt matter", _loadBalancerOptions, "http", _qoSOptions, _handlerOptions, new Version("1.1"));
|
||||||
|
|
||||||
this.Given(_ => GivenTheConfiguration(configuration))
|
this.Given(_ => GivenTheConfiguration(configuration))
|
||||||
.When(_ => WhenICreate())
|
.When(_ => WhenICreate())
|
||||||
@ -71,7 +72,7 @@ namespace Ocelot.UnitTests.DownstreamRouteFinder
|
|||||||
|
|
||||||
var reRoutes = new List<ReRoute> { reRoute };
|
var reRoutes = new List<ReRoute> { reRoute };
|
||||||
|
|
||||||
var configuration = new InternalConfiguration(reRoutes, "doesnt matter", null, "doesnt matter", _loadBalancerOptions, "http", _qoSOptions, _handlerOptions);
|
var configuration = new InternalConfiguration(reRoutes, "doesnt matter", null, "doesnt matter", _loadBalancerOptions, "http", _qoSOptions, _handlerOptions, new Version("1.1"));
|
||||||
|
|
||||||
this.Given(_ => GivenTheConfiguration(configuration))
|
this.Given(_ => GivenTheConfiguration(configuration))
|
||||||
.When(_ => WhenICreate())
|
.When(_ => WhenICreate())
|
||||||
@ -83,7 +84,7 @@ namespace Ocelot.UnitTests.DownstreamRouteFinder
|
|||||||
[Fact]
|
[Fact]
|
||||||
public void should_cache_downstream_route()
|
public void should_cache_downstream_route()
|
||||||
{
|
{
|
||||||
var configuration = new InternalConfiguration(null, "doesnt matter", null, "doesnt matter", _loadBalancerOptions, "http", _qoSOptions, _handlerOptions);
|
var configuration = new InternalConfiguration(null, "doesnt matter", null, "doesnt matter", _loadBalancerOptions, "http", _qoSOptions, _handlerOptions, new Version("1.1"));
|
||||||
|
|
||||||
this.Given(_ => GivenTheConfiguration(configuration, "/geoffisthebest/"))
|
this.Given(_ => GivenTheConfiguration(configuration, "/geoffisthebest/"))
|
||||||
.When(_ => WhenICreate())
|
.When(_ => WhenICreate())
|
||||||
@ -96,7 +97,7 @@ namespace Ocelot.UnitTests.DownstreamRouteFinder
|
|||||||
[Fact]
|
[Fact]
|
||||||
public void should_not_cache_downstream_route()
|
public void should_not_cache_downstream_route()
|
||||||
{
|
{
|
||||||
var configuration = new InternalConfiguration(null, "doesnt matter", null, "doesnt matter", _loadBalancerOptions, "http", _qoSOptions, _handlerOptions);
|
var configuration = new InternalConfiguration(null, "doesnt matter", null, "doesnt matter", _loadBalancerOptions, "http", _qoSOptions, _handlerOptions, new Version("1.1"));
|
||||||
|
|
||||||
this.Given(_ => GivenTheConfiguration(configuration, "/geoffistheworst/"))
|
this.Given(_ => GivenTheConfiguration(configuration, "/geoffistheworst/"))
|
||||||
.When(_ => WhenICreate())
|
.When(_ => WhenICreate())
|
||||||
@ -110,7 +111,7 @@ namespace Ocelot.UnitTests.DownstreamRouteFinder
|
|||||||
public void should_create_downstream_route_with_no_path()
|
public void should_create_downstream_route_with_no_path()
|
||||||
{
|
{
|
||||||
var upstreamUrlPath = "/auth/";
|
var upstreamUrlPath = "/auth/";
|
||||||
var configuration = new InternalConfiguration(null, "doesnt matter", null, "doesnt matter", _loadBalancerOptions, "http", _qoSOptions, _handlerOptions);
|
var configuration = new InternalConfiguration(null, "doesnt matter", null, "doesnt matter", _loadBalancerOptions, "http", _qoSOptions, _handlerOptions, new Version("1.1"));
|
||||||
|
|
||||||
this.Given(_ => GivenTheConfiguration(configuration, upstreamUrlPath))
|
this.Given(_ => GivenTheConfiguration(configuration, upstreamUrlPath))
|
||||||
.When(_ => WhenICreate())
|
.When(_ => WhenICreate())
|
||||||
@ -122,7 +123,7 @@ namespace Ocelot.UnitTests.DownstreamRouteFinder
|
|||||||
public void should_create_downstream_route_with_only_first_segment_no_traling_slash()
|
public void should_create_downstream_route_with_only_first_segment_no_traling_slash()
|
||||||
{
|
{
|
||||||
var upstreamUrlPath = "/auth";
|
var upstreamUrlPath = "/auth";
|
||||||
var configuration = new InternalConfiguration(null, "doesnt matter", null, "doesnt matter", _loadBalancerOptions, "http", _qoSOptions, _handlerOptions);
|
var configuration = new InternalConfiguration(null, "doesnt matter", null, "doesnt matter", _loadBalancerOptions, "http", _qoSOptions, _handlerOptions, new Version("1.1"));
|
||||||
|
|
||||||
this.Given(_ => GivenTheConfiguration(configuration, upstreamUrlPath))
|
this.Given(_ => GivenTheConfiguration(configuration, upstreamUrlPath))
|
||||||
.When(_ => WhenICreate())
|
.When(_ => WhenICreate())
|
||||||
@ -134,7 +135,7 @@ namespace Ocelot.UnitTests.DownstreamRouteFinder
|
|||||||
public void should_create_downstream_route_with_segments_no_traling_slash()
|
public void should_create_downstream_route_with_segments_no_traling_slash()
|
||||||
{
|
{
|
||||||
var upstreamUrlPath = "/auth/test";
|
var upstreamUrlPath = "/auth/test";
|
||||||
var configuration = new InternalConfiguration(null, "doesnt matter", null, "doesnt matter", _loadBalancerOptions, "http", _qoSOptions, _handlerOptions);
|
var configuration = new InternalConfiguration(null, "doesnt matter", null, "doesnt matter", _loadBalancerOptions, "http", _qoSOptions, _handlerOptions, new Version("1.1"));
|
||||||
|
|
||||||
this.Given(_ => GivenTheConfiguration(configuration, upstreamUrlPath))
|
this.Given(_ => GivenTheConfiguration(configuration, upstreamUrlPath))
|
||||||
.When(_ => WhenICreate())
|
.When(_ => WhenICreate())
|
||||||
@ -146,7 +147,7 @@ namespace Ocelot.UnitTests.DownstreamRouteFinder
|
|||||||
public void should_create_downstream_route_and_remove_query_string()
|
public void should_create_downstream_route_and_remove_query_string()
|
||||||
{
|
{
|
||||||
var upstreamUrlPath = "/auth/test?test=1&best=2";
|
var upstreamUrlPath = "/auth/test?test=1&best=2";
|
||||||
var configuration = new InternalConfiguration(null, "doesnt matter", null, "doesnt matter", _loadBalancerOptions, "http", _qoSOptions, _handlerOptions);
|
var configuration = new InternalConfiguration(null, "doesnt matter", null, "doesnt matter", _loadBalancerOptions, "http", _qoSOptions, _handlerOptions, new Version("1.1"));
|
||||||
|
|
||||||
this.Given(_ => GivenTheConfiguration(configuration, upstreamUrlPath))
|
this.Given(_ => GivenTheConfiguration(configuration, upstreamUrlPath))
|
||||||
.When(_ => WhenICreate())
|
.When(_ => WhenICreate())
|
||||||
@ -158,7 +159,7 @@ namespace Ocelot.UnitTests.DownstreamRouteFinder
|
|||||||
public void should_create_downstream_route_for_sticky_sessions()
|
public void should_create_downstream_route_for_sticky_sessions()
|
||||||
{
|
{
|
||||||
var loadBalancerOptions = new LoadBalancerOptionsBuilder().WithType(nameof(CookieStickySessions)).WithKey("boom").WithExpiryInMs(1).Build();
|
var loadBalancerOptions = new LoadBalancerOptionsBuilder().WithType(nameof(CookieStickySessions)).WithKey("boom").WithExpiryInMs(1).Build();
|
||||||
var configuration = new InternalConfiguration(null, "doesnt matter", null, "doesnt matter", loadBalancerOptions, "http", _qoSOptions, _handlerOptions);
|
var configuration = new InternalConfiguration(null, "doesnt matter", null, "doesnt matter", loadBalancerOptions, "http", _qoSOptions, _handlerOptions, new Version("1.1"));
|
||||||
|
|
||||||
this.Given(_ => GivenTheConfiguration(configuration))
|
this.Given(_ => GivenTheConfiguration(configuration))
|
||||||
.When(_ => WhenICreate())
|
.When(_ => WhenICreate())
|
||||||
@ -174,7 +175,7 @@ namespace Ocelot.UnitTests.DownstreamRouteFinder
|
|||||||
.WithTimeoutValue(1)
|
.WithTimeoutValue(1)
|
||||||
.Build();
|
.Build();
|
||||||
|
|
||||||
var configuration = new InternalConfiguration(null, "doesnt matter", null, "doesnt matter", _loadBalancerOptions, "http", qoSOptions, _handlerOptions);
|
var configuration = new InternalConfiguration(null, "doesnt matter", null, "doesnt matter", _loadBalancerOptions, "http", qoSOptions, _handlerOptions, new Version("1.1"));
|
||||||
|
|
||||||
this.Given(_ => GivenTheConfiguration(configuration))
|
this.Given(_ => GivenTheConfiguration(configuration))
|
||||||
.And(_ => GivenTheQosCreatorReturns(qoSOptions))
|
.And(_ => GivenTheQosCreatorReturns(qoSOptions))
|
||||||
@ -186,7 +187,7 @@ namespace Ocelot.UnitTests.DownstreamRouteFinder
|
|||||||
[Fact]
|
[Fact]
|
||||||
public void should_create_downstream_route_with_handler_options()
|
public void should_create_downstream_route_with_handler_options()
|
||||||
{
|
{
|
||||||
var configuration = new InternalConfiguration(null, "doesnt matter", null, "doesnt matter", _loadBalancerOptions, "http", _qoSOptions, _handlerOptions);
|
var configuration = new InternalConfiguration(null, "doesnt matter", null, "doesnt matter", _loadBalancerOptions, "http", _qoSOptions, _handlerOptions, new Version("1.1"));
|
||||||
|
|
||||||
this.Given(_ => GivenTheConfiguration(configuration))
|
this.Given(_ => GivenTheConfiguration(configuration))
|
||||||
.When(_ => WhenICreate())
|
.When(_ => WhenICreate())
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
namespace Ocelot.UnitTests.DownstreamRouteFinder
|
namespace Ocelot.UnitTests.DownstreamRouteFinder
|
||||||
{
|
{
|
||||||
|
using System;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
using Moq;
|
using Moq;
|
||||||
using Ocelot.Configuration;
|
using Ocelot.Configuration;
|
||||||
@ -48,7 +49,7 @@
|
|||||||
[Fact]
|
[Fact]
|
||||||
public void should_call_scoped_data_repository_correctly()
|
public void should_call_scoped_data_repository_correctly()
|
||||||
{
|
{
|
||||||
var config = new InternalConfiguration(null, null, new ServiceProviderConfigurationBuilder().Build(), "", new LoadBalancerOptionsBuilder().Build(), "", new QoSOptionsBuilder().Build(), new HttpHandlerOptionsBuilder().Build());
|
var config = new InternalConfiguration(null, null, new ServiceProviderConfigurationBuilder().Build(), "", new LoadBalancerOptionsBuilder().Build(), "", new QoSOptionsBuilder().Build(), new HttpHandlerOptionsBuilder().Build(), new Version("1.1"));
|
||||||
|
|
||||||
var downstreamReRoute = new DownstreamReRouteBuilder()
|
var downstreamReRoute = new DownstreamReRouteBuilder()
|
||||||
.WithDownstreamPathTemplate("any old string")
|
.WithDownstreamPathTemplate("any old string")
|
||||||
|
@ -13,6 +13,8 @@ using Xunit;
|
|||||||
|
|
||||||
namespace Ocelot.UnitTests.DownstreamRouteFinder
|
namespace Ocelot.UnitTests.DownstreamRouteFinder
|
||||||
{
|
{
|
||||||
|
using System;
|
||||||
|
|
||||||
public class DownstreamRouteFinderTests
|
public class DownstreamRouteFinderTests
|
||||||
{
|
{
|
||||||
private readonly IDownstreamRouteProvider _downstreamRouteFinder;
|
private readonly IDownstreamRouteProvider _downstreamRouteFinder;
|
||||||
@ -739,7 +741,7 @@ namespace Ocelot.UnitTests.DownstreamRouteFinder
|
|||||||
private void GivenTheConfigurationIs(List<ReRoute> reRoutesConfig, string adminPath, ServiceProviderConfiguration serviceProviderConfig)
|
private void GivenTheConfigurationIs(List<ReRoute> reRoutesConfig, string adminPath, ServiceProviderConfiguration serviceProviderConfig)
|
||||||
{
|
{
|
||||||
_reRoutesConfig = reRoutesConfig;
|
_reRoutesConfig = reRoutesConfig;
|
||||||
_config = new InternalConfiguration(_reRoutesConfig, adminPath, serviceProviderConfig, "", new LoadBalancerOptionsBuilder().Build(), "", new QoSOptionsBuilder().Build(), new HttpHandlerOptionsBuilder().Build());
|
_config = new InternalConfiguration(_reRoutesConfig, adminPath, serviceProviderConfig, "", new LoadBalancerOptionsBuilder().Build(), "", new QoSOptionsBuilder().Build(), new HttpHandlerOptionsBuilder().Build(), new Version("1.1"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void GivenThereIsAnUpstreamUrlPath(string upstreamUrlPath)
|
private void GivenThereIsAnUpstreamUrlPath(string upstreamUrlPath)
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
namespace Ocelot.UnitTests.DownstreamRouteFinder
|
namespace Ocelot.UnitTests.DownstreamRouteFinder
|
||||||
{
|
{
|
||||||
|
using System;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Moq;
|
using Moq;
|
||||||
using Ocelot.Configuration;
|
using Ocelot.Configuration;
|
||||||
@ -140,12 +141,12 @@ namespace Ocelot.UnitTests.DownstreamRouteFinder
|
|||||||
|
|
||||||
private void GivenTheReRoutes(List<ReRoute> reRoutes)
|
private void GivenTheReRoutes(List<ReRoute> reRoutes)
|
||||||
{
|
{
|
||||||
_config = new InternalConfiguration(reRoutes, "", null, "", new LoadBalancerOptionsBuilder().Build(), "", new QoSOptionsBuilder().Build(), new HttpHandlerOptionsBuilder().Build());
|
_config = new InternalConfiguration(reRoutes, "", null, "", new LoadBalancerOptionsBuilder().Build(), "", new QoSOptionsBuilder().Build(), new HttpHandlerOptionsBuilder().Build(), new Version("1.1"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void GivenTheReRoutes(List<ReRoute> reRoutes, ServiceProviderConfiguration config)
|
private void GivenTheReRoutes(List<ReRoute> reRoutes, ServiceProviderConfiguration config)
|
||||||
{
|
{
|
||||||
_config = new InternalConfiguration(reRoutes, "", config, "", new LoadBalancerOptionsBuilder().Build(), "", new QoSOptionsBuilder().Build(), new HttpHandlerOptionsBuilder().Build());
|
_config = new InternalConfiguration(reRoutes, "", config, "", new LoadBalancerOptionsBuilder().Build(), "", new QoSOptionsBuilder().Build(), new HttpHandlerOptionsBuilder().Build(), new Version("1.1"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -382,7 +382,7 @@
|
|||||||
|
|
||||||
private void GivenTheServiceProviderConfigIs(ServiceProviderConfiguration config)
|
private void GivenTheServiceProviderConfigIs(ServiceProviderConfiguration config)
|
||||||
{
|
{
|
||||||
var configuration = new InternalConfiguration(null, null, config, null, null, null, null, null);
|
var configuration = new InternalConfiguration(null, null, config, null, null, null, null, null, null);
|
||||||
_downstreamContext.Configuration = configuration;
|
_downstreamContext.Configuration = configuration;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ namespace Ocelot.UnitTests.Errors
|
|||||||
[Fact]
|
[Fact]
|
||||||
public void NoDownstreamException()
|
public void NoDownstreamException()
|
||||||
{
|
{
|
||||||
var config = new InternalConfiguration(null, null, null, null, null, null, null, null);
|
var config = new InternalConfiguration(null, null, null, null, null, null, null, null, null);
|
||||||
|
|
||||||
this.Given(_ => GivenAnExceptionWillNotBeThrownDownstream())
|
this.Given(_ => GivenAnExceptionWillNotBeThrownDownstream())
|
||||||
.And(_ => GivenTheConfigurationIs(config))
|
.And(_ => GivenTheConfigurationIs(config))
|
||||||
@ -65,7 +65,7 @@ namespace Ocelot.UnitTests.Errors
|
|||||||
[Fact]
|
[Fact]
|
||||||
public void DownstreamException()
|
public void DownstreamException()
|
||||||
{
|
{
|
||||||
var config = new InternalConfiguration(null, null, null, null, null, null, null, null);
|
var config = new InternalConfiguration(null, null, null, null, null, null, null, null, null);
|
||||||
|
|
||||||
this.Given(_ => GivenAnExceptionWillBeThrownDownstream())
|
this.Given(_ => GivenAnExceptionWillBeThrownDownstream())
|
||||||
.And(_ => GivenTheConfigurationIs(config))
|
.And(_ => GivenTheConfigurationIs(config))
|
||||||
@ -77,7 +77,7 @@ namespace Ocelot.UnitTests.Errors
|
|||||||
[Fact]
|
[Fact]
|
||||||
public void ShouldSetRequestId()
|
public void ShouldSetRequestId()
|
||||||
{
|
{
|
||||||
var config = new InternalConfiguration(null, null, null, "requestidkey", null, null, null, null);
|
var config = new InternalConfiguration(null, null, null, "requestidkey", null, null, null, null, null);
|
||||||
|
|
||||||
this.Given(_ => GivenAnExceptionWillNotBeThrownDownstream())
|
this.Given(_ => GivenAnExceptionWillNotBeThrownDownstream())
|
||||||
.And(_ => GivenTheConfigurationIs(config))
|
.And(_ => GivenTheConfigurationIs(config))
|
||||||
@ -90,7 +90,7 @@ namespace Ocelot.UnitTests.Errors
|
|||||||
[Fact]
|
[Fact]
|
||||||
public void ShouldSetAspDotNetRequestId()
|
public void ShouldSetAspDotNetRequestId()
|
||||||
{
|
{
|
||||||
var config = new InternalConfiguration(null, null, null, null, null, null, null, null);
|
var config = new InternalConfiguration(null, null, null, null, null, null, null, null, null);
|
||||||
|
|
||||||
this.Given(_ => GivenAnExceptionWillNotBeThrownDownstream())
|
this.Given(_ => GivenAnExceptionWillNotBeThrownDownstream())
|
||||||
.And(_ => GivenTheConfigurationIs(config))
|
.And(_ => GivenTheConfigurationIs(config))
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
{
|
{
|
||||||
var configRepo = new Mock<IInternalConfigurationRepository>();
|
var configRepo = new Mock<IInternalConfigurationRepository>();
|
||||||
configRepo.Setup(x => x.Get())
|
configRepo.Setup(x => x.Get())
|
||||||
.Returns(new OkResponse<IInternalConfiguration>(new InternalConfiguration(null, null, null, null, null, null, null, null)));
|
.Returns(new OkResponse<IInternalConfiguration>(new InternalConfiguration(null, null, null, null, null, null, null, null, null)));
|
||||||
var services = new ServiceCollection();
|
var services = new ServiceCollection();
|
||||||
services.AddSingleton<IInternalConfigurationRepository>(configRepo.Object);
|
services.AddSingleton<IInternalConfigurationRepository>(configRepo.Object);
|
||||||
var sp = services.BuildServiceProvider();
|
var sp = services.BuildServiceProvider();
|
||||||
@ -35,7 +35,7 @@
|
|||||||
var client = new Mock<IDiscoveryClient>();
|
var client = new Mock<IDiscoveryClient>();
|
||||||
var configRepo = new Mock<IInternalConfigurationRepository>();
|
var configRepo = new Mock<IInternalConfigurationRepository>();
|
||||||
configRepo.Setup(x => x.Get())
|
configRepo.Setup(x => x.Get())
|
||||||
.Returns(new OkResponse<IInternalConfiguration>(new InternalConfiguration(null, null, serviceProviderConfig, null, null, null, null, null)));
|
.Returns(new OkResponse<IInternalConfiguration>(new InternalConfiguration(null, null, serviceProviderConfig, null, null, null, null, null, null)));
|
||||||
var services = new ServiceCollection();
|
var services = new ServiceCollection();
|
||||||
services.AddSingleton<IInternalConfigurationRepository>(configRepo.Object);
|
services.AddSingleton<IInternalConfigurationRepository>(configRepo.Object);
|
||||||
services.AddSingleton<IDiscoveryClient>(client.Object);
|
services.AddSingleton<IDiscoveryClient>(client.Object);
|
||||||
|
@ -139,7 +139,7 @@ namespace Ocelot.UnitTests.LoadBalancer
|
|||||||
private void GivenTheConfigurationIs(ServiceProviderConfiguration config)
|
private void GivenTheConfigurationIs(ServiceProviderConfiguration config)
|
||||||
{
|
{
|
||||||
_config = config;
|
_config = config;
|
||||||
var configuration = new InternalConfiguration(null, null, config, null, null, null, null, null);
|
var configuration = new InternalConfiguration(null, null, config, null, null, null, null, null, null);
|
||||||
_downstreamContext.Configuration = configuration;
|
_downstreamContext.Configuration = configuration;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,6 +51,7 @@
|
|||||||
.And(_ => GivenTheInputRequestHasHost(host))
|
.And(_ => GivenTheInputRequestHasHost(host))
|
||||||
.And(_ => GivenTheInputRequestHasPath(path))
|
.And(_ => GivenTheInputRequestHasPath(path))
|
||||||
.And(_ => GivenTheInputRequestHasQueryString(queryString))
|
.And(_ => GivenTheInputRequestHasQueryString(queryString))
|
||||||
|
.And(_ => GivenTheDownstreamReRoute())
|
||||||
.When(_ => WhenMapped())
|
.When(_ => WhenMapped())
|
||||||
.Then(_ => ThenNoErrorIsReturned())
|
.Then(_ => ThenNoErrorIsReturned())
|
||||||
.And(_ => ThenTheMappedRequestHasUri(expectedUri))
|
.And(_ => ThenTheMappedRequestHasUri(expectedUri))
|
||||||
@ -80,6 +81,7 @@
|
|||||||
{
|
{
|
||||||
this.Given(_ => GivenTheInputRequestHasMethod(method))
|
this.Given(_ => GivenTheInputRequestHasMethod(method))
|
||||||
.And(_ => GivenTheInputRequestHasAValidUri())
|
.And(_ => GivenTheInputRequestHasAValidUri())
|
||||||
|
.And(_ => GivenTheDownstreamReRoute())
|
||||||
.When(_ => WhenMapped())
|
.When(_ => WhenMapped())
|
||||||
.Then(_ => ThenNoErrorIsReturned())
|
.Then(_ => ThenNoErrorIsReturned())
|
||||||
.And(_ => ThenTheMappedRequestHasMethod(method))
|
.And(_ => ThenTheMappedRequestHasMethod(method))
|
||||||
@ -107,6 +109,7 @@
|
|||||||
this.Given(_ => GivenTheInputRequestHasHeaders())
|
this.Given(_ => GivenTheInputRequestHasHeaders())
|
||||||
.And(_ => GivenTheInputRequestHasMethod("GET"))
|
.And(_ => GivenTheInputRequestHasMethod("GET"))
|
||||||
.And(_ => GivenTheInputRequestHasAValidUri())
|
.And(_ => GivenTheInputRequestHasAValidUri())
|
||||||
|
.And(_ => GivenTheDownstreamReRoute())
|
||||||
.When(_ => WhenMapped())
|
.When(_ => WhenMapped())
|
||||||
.Then(_ => ThenNoErrorIsReturned())
|
.Then(_ => ThenNoErrorIsReturned())
|
||||||
.And(_ => ThenTheMappedRequestHasEachHeader())
|
.And(_ => ThenTheMappedRequestHasEachHeader())
|
||||||
@ -119,6 +122,7 @@
|
|||||||
this.Given(_ => GivenTheInputRequestHasNoHeaders())
|
this.Given(_ => GivenTheInputRequestHasNoHeaders())
|
||||||
.And(_ => GivenTheInputRequestHasMethod("GET"))
|
.And(_ => GivenTheInputRequestHasMethod("GET"))
|
||||||
.And(_ => GivenTheInputRequestHasAValidUri())
|
.And(_ => GivenTheInputRequestHasAValidUri())
|
||||||
|
.And(_ => GivenTheDownstreamReRoute())
|
||||||
.When(_ => WhenMapped())
|
.When(_ => WhenMapped())
|
||||||
.Then(_ => ThenNoErrorIsReturned())
|
.Then(_ => ThenNoErrorIsReturned())
|
||||||
.And(_ => ThenTheMappedRequestHasNoHeaders())
|
.And(_ => ThenTheMappedRequestHasNoHeaders())
|
||||||
@ -131,6 +135,7 @@
|
|||||||
this.Given(_ => GivenTheInputRequestHasContent("This is my content"))
|
this.Given(_ => GivenTheInputRequestHasContent("This is my content"))
|
||||||
.And(_ => GivenTheInputRequestHasMethod("GET"))
|
.And(_ => GivenTheInputRequestHasMethod("GET"))
|
||||||
.And(_ => GivenTheInputRequestHasAValidUri())
|
.And(_ => GivenTheInputRequestHasAValidUri())
|
||||||
|
.And(_ => GivenTheDownstreamReRoute())
|
||||||
.When(_ => WhenMapped())
|
.When(_ => WhenMapped())
|
||||||
.Then(_ => ThenNoErrorIsReturned())
|
.Then(_ => ThenNoErrorIsReturned())
|
||||||
.And(_ => ThenTheMappedRequestHasContent("This is my content"))
|
.And(_ => ThenTheMappedRequestHasContent("This is my content"))
|
||||||
@ -143,6 +148,7 @@
|
|||||||
this.Given(_ => GivenTheInputRequestHasNullContent())
|
this.Given(_ => GivenTheInputRequestHasNullContent())
|
||||||
.And(_ => GivenTheInputRequestHasMethod("GET"))
|
.And(_ => GivenTheInputRequestHasMethod("GET"))
|
||||||
.And(_ => GivenTheInputRequestHasAValidUri())
|
.And(_ => GivenTheInputRequestHasAValidUri())
|
||||||
|
.And(_ => GivenTheDownstreamReRoute())
|
||||||
.When(_ => WhenMapped())
|
.When(_ => WhenMapped())
|
||||||
.Then(_ => ThenNoErrorIsReturned())
|
.Then(_ => ThenNoErrorIsReturned())
|
||||||
.And(_ => ThenTheMappedRequestHasNoContent())
|
.And(_ => ThenTheMappedRequestHasNoContent())
|
||||||
@ -155,6 +161,7 @@
|
|||||||
this.Given(_ => GivenTheInputRequestHasNoContentType())
|
this.Given(_ => GivenTheInputRequestHasNoContentType())
|
||||||
.And(_ => GivenTheInputRequestHasMethod("GET"))
|
.And(_ => GivenTheInputRequestHasMethod("GET"))
|
||||||
.And(_ => GivenTheInputRequestHasAValidUri())
|
.And(_ => GivenTheInputRequestHasAValidUri())
|
||||||
|
.And(_ => GivenTheDownstreamReRoute())
|
||||||
.When(_ => WhenMapped())
|
.When(_ => WhenMapped())
|
||||||
.Then(_ => ThenNoErrorIsReturned())
|
.Then(_ => ThenNoErrorIsReturned())
|
||||||
.And(_ => ThenTheMappedRequestHasNoContent())
|
.And(_ => ThenTheMappedRequestHasNoContent())
|
||||||
@ -167,6 +174,7 @@
|
|||||||
this.Given(_ => GivenTheInputRequestHasNoContentLength())
|
this.Given(_ => GivenTheInputRequestHasNoContentLength())
|
||||||
.And(_ => GivenTheInputRequestHasMethod("GET"))
|
.And(_ => GivenTheInputRequestHasMethod("GET"))
|
||||||
.And(_ => GivenTheInputRequestHasAValidUri())
|
.And(_ => GivenTheInputRequestHasAValidUri())
|
||||||
|
.And(_ => GivenTheDownstreamReRoute())
|
||||||
.When(_ => WhenMapped())
|
.When(_ => WhenMapped())
|
||||||
.Then(_ => ThenNoErrorIsReturned())
|
.Then(_ => ThenNoErrorIsReturned())
|
||||||
.And(_ => ThenTheMappedRequestHasNoContent())
|
.And(_ => ThenTheMappedRequestHasNoContent())
|
||||||
@ -192,6 +200,7 @@
|
|||||||
.And(_ => GivenTheContentMD5Is(md5bytes))
|
.And(_ => GivenTheContentMD5Is(md5bytes))
|
||||||
.And(_ => GivenTheInputRequestHasMethod("GET"))
|
.And(_ => GivenTheInputRequestHasMethod("GET"))
|
||||||
.And(_ => GivenTheInputRequestHasAValidUri())
|
.And(_ => GivenTheInputRequestHasAValidUri())
|
||||||
|
.And(_ => GivenTheDownstreamReRoute())
|
||||||
.When(_ => WhenMapped())
|
.When(_ => WhenMapped())
|
||||||
.Then(_ => ThenNoErrorIsReturned())
|
.Then(_ => ThenNoErrorIsReturned())
|
||||||
.And(_ => ThenTheMappedRequestHasContentTypeHeader("application/json"))
|
.And(_ => ThenTheMappedRequestHasContentTypeHeader("application/json"))
|
||||||
@ -213,6 +222,7 @@
|
|||||||
.And(_ => GivenTheContentTypeIs("application/json"))
|
.And(_ => GivenTheContentTypeIs("application/json"))
|
||||||
.And(_ => GivenTheInputRequestHasMethod("POST"))
|
.And(_ => GivenTheInputRequestHasMethod("POST"))
|
||||||
.And(_ => GivenTheInputRequestHasAValidUri())
|
.And(_ => GivenTheInputRequestHasAValidUri())
|
||||||
|
.And(_ => GivenTheDownstreamReRoute())
|
||||||
.When(_ => WhenMapped())
|
.When(_ => WhenMapped())
|
||||||
.Then(_ => ThenNoErrorIsReturned())
|
.Then(_ => ThenNoErrorIsReturned())
|
||||||
.And(_ => ThenTheMappedRequestHasContentTypeHeader("application/json"))
|
.And(_ => ThenTheMappedRequestHasContentTypeHeader("application/json"))
|
||||||
@ -223,7 +233,15 @@
|
|||||||
|
|
||||||
private void GivenTheDownstreamReRouteMethodIs(string input)
|
private void GivenTheDownstreamReRouteMethodIs(string input)
|
||||||
{
|
{
|
||||||
_downstreamReRoute = new DownstreamReRouteBuilder().WithDownStreamHttpMethod(input).Build();
|
_downstreamReRoute = new DownstreamReRouteBuilder()
|
||||||
|
.WithDownStreamHttpMethod(input)
|
||||||
|
.WithDownstreamHttpVersion(new Version("1.1")).Build();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void GivenTheDownstreamReRoute()
|
||||||
|
{
|
||||||
|
_downstreamReRoute = new DownstreamReRouteBuilder()
|
||||||
|
.WithDownstreamHttpVersion(new Version("1.1")).Build();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void GivenTheInputRequestHasNoContentLength()
|
private void GivenTheInputRequestHasNoContentLength()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user