mirror of
				https://github.com/nsnail/Ocelot.git
				synced 2025-11-04 18:10:50 +08:00 
			
		
		
		
	@@ -2,7 +2,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[](https://ci.appveyor.com/project/TomPallister/ocelot-fcfpb)
 | 
					[](https://ci.appveyor.com/project/TomPallister/ocelot-fcfpb)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[](https://gitter.im/Ocelotey/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
 | 
					[](https://coveralls.io/github/TomPallister/Ocelot?branch=develop)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Attempt at a .NET Api Gateway
 | 
					Attempt at a .NET Api Gateway
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										64
									
								
								build.cake
									
									
									
									
									
								
							
							
						
						
									
										64
									
								
								build.cake
									
									
									
									
									
								
							@@ -1,6 +1,10 @@
 | 
				
			|||||||
#tool "nuget:?package=GitVersion.CommandLine"
 | 
					#tool "nuget:?package=GitVersion.CommandLine"
 | 
				
			||||||
#tool "nuget:?package=GitReleaseNotes"
 | 
					#tool "nuget:?package=GitReleaseNotes"
 | 
				
			||||||
#addin "nuget:?package=Cake.Json"
 | 
					#addin "nuget:?package=Cake.Json"
 | 
				
			||||||
 | 
					#tool "nuget:?package=OpenCover"
 | 
				
			||||||
 | 
					#tool "nuget:?package=ReportGenerator"
 | 
				
			||||||
 | 
					#tool coveralls.net
 | 
				
			||||||
 | 
					#addin Cake.Coveralls
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// compile
 | 
					// compile
 | 
				
			||||||
var compileConfig = Argument("configuration", "Release");
 | 
					var compileConfig = Argument("configuration", "Release");
 | 
				
			||||||
@@ -12,6 +16,9 @@ var artifactsDir = Directory("artifacts");
 | 
				
			|||||||
// unit testing
 | 
					// unit testing
 | 
				
			||||||
var artifactsForUnitTestsDir = artifactsDir + Directory("UnitTests");
 | 
					var artifactsForUnitTestsDir = artifactsDir + Directory("UnitTests");
 | 
				
			||||||
var unitTestAssemblies = @"./test/Ocelot.UnitTests/Ocelot.UnitTests.csproj";
 | 
					var unitTestAssemblies = @"./test/Ocelot.UnitTests/Ocelot.UnitTests.csproj";
 | 
				
			||||||
 | 
					var minCodeCoverage = 75d;
 | 
				
			||||||
 | 
					var coverallsRepoToken = "coveralls-repo-token-ocelot";
 | 
				
			||||||
 | 
					var coverallsRepo = "https://coveralls.io/github/TomPallister/Ocelot";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// acceptance testing
 | 
					// acceptance testing
 | 
				
			||||||
var artifactsForAcceptanceTestsDir = artifactsDir + Directory("AcceptanceTests");
 | 
					var artifactsForAcceptanceTestsDir = artifactsDir + Directory("AcceptanceTests");
 | 
				
			||||||
@@ -117,6 +124,62 @@ Task("Compile")
 | 
				
			|||||||
Task("RunUnitTests")
 | 
					Task("RunUnitTests")
 | 
				
			||||||
	.IsDependentOn("Compile")
 | 
						.IsDependentOn("Compile")
 | 
				
			||||||
	.Does(() =>
 | 
						.Does(() =>
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							if (IsRunningOnWindows())
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								var coverageSummaryFile = artifactsForUnitTestsDir + File("coverage.xml");
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
								EnsureDirectoryExists(artifactsForUnitTestsDir);
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
								OpenCover(tool => 
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										tool.DotNetCoreTest(unitTestAssemblies);
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									new FilePath(coverageSummaryFile),
 | 
				
			||||||
 | 
									new OpenCoverSettings()
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										Register="user",
 | 
				
			||||||
 | 
										ArgumentCustomization=args=>args.Append(@"-oldstyle -returntargetcode")
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									.WithFilter("+[Ocelot*]*")
 | 
				
			||||||
 | 
									.WithFilter("-[xunit*]*")
 | 
				
			||||||
 | 
									.WithFilter("-[Ocelot*Tests]*")
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
								ReportGenerator(coverageSummaryFile, artifactsForUnitTestsDir);
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
								if (AppVeyor.IsRunningOnAppVeyor)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									var repoToken = EnvironmentVariable(coverallsRepoToken);
 | 
				
			||||||
 | 
									if (string.IsNullOrEmpty(repoToken))
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										throw new Exception(string.Format("Coveralls repo token not found. Set environment variable '{0}'", coverallsRepoToken));
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									Information(string.Format("Uploading test coverage to {0}", coverallsRepo));
 | 
				
			||||||
 | 
									CoverallsNet(coverageSummaryFile, CoverallsNetReportType.OpenCover, new CoverallsNetSettings()
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										RepoToken = repoToken
 | 
				
			||||||
 | 
									});
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								else
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									Information("We are not running on the build server so we won't publish the coverage report to coveralls.io");
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								var sequenceCoverage = XmlPeek(coverageSummaryFile, "//CoverageSession/Summary/@sequenceCoverage");
 | 
				
			||||||
 | 
								var branchCoverage = XmlPeek(coverageSummaryFile, "//CoverageSession/Summary/@branchCoverage");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								Information("Sequence Coverage: " + sequenceCoverage);
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
								if(double.Parse(sequenceCoverage) < minCodeCoverage)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									var whereToCheck = !AppVeyor.IsRunningOnAppVeyor ? coverallsRepo : artifactsForUnitTestsDir;
 | 
				
			||||||
 | 
									throw new Exception(string.Format("Code coverage fell below the threshold of {0}%. You can find the code coverage report at {1}", minCodeCoverage, whereToCheck));
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			var settings = new DotNetCoreTestSettings
 | 
								var settings = new DotNetCoreTestSettings
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
@@ -125,6 +188,7 @@ Task("RunUnitTests")
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			EnsureDirectoryExists(artifactsForUnitTestsDir);
 | 
								EnsureDirectoryExists(artifactsForUnitTestsDir);
 | 
				
			||||||
			DotNetCoreTest(unitTestAssemblies, settings);
 | 
								DotNetCoreTest(unitTestAssemblies, settings);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	});
 | 
						});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Task("RunAcceptanceTests")
 | 
					Task("RunAcceptanceTests")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,6 +20,11 @@
 | 
				
			|||||||
	<Authors>Tom Pallister</Authors>
 | 
						<Authors>Tom Pallister</Authors>
 | 
				
			||||||
  </PropertyGroup>
 | 
					  </PropertyGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
 | 
				
			||||||
 | 
					    <DebugType>full</DebugType>
 | 
				
			||||||
 | 
					    <DebugSymbols>True</DebugSymbols>
 | 
				
			||||||
 | 
					  </PropertyGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  <ItemGroup>
 | 
					  <ItemGroup>
 | 
				
			||||||
    <PackageReference Include="Microsoft.AspNetCore.Server.IISIntegration" Version="1.1.1" />
 | 
					    <PackageReference Include="Microsoft.AspNetCore.Server.IISIntegration" Version="1.1.1" />
 | 
				
			||||||
    <PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="1.1.1" />
 | 
					    <PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="1.1.1" />
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,6 +5,7 @@
 | 
				
			|||||||
    using System.IO;
 | 
					    using System.IO;
 | 
				
			||||||
    using System.Linq;
 | 
					    using System.Linq;
 | 
				
			||||||
    using System.Net.Http;
 | 
					    using System.Net.Http;
 | 
				
			||||||
 | 
					    using System.Net.Http.Headers;
 | 
				
			||||||
    using System.Threading.Tasks;
 | 
					    using System.Threading.Tasks;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    using Microsoft.AspNetCore.Http;
 | 
					    using Microsoft.AspNetCore.Http;
 | 
				
			||||||
@@ -44,7 +45,11 @@
 | 
				
			|||||||
                return null;
 | 
					                return null;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            return new ByteArrayContent(await ToByteArray(request.Body));
 | 
					            var content = new ByteArrayContent(await ToByteArray(request.Body));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            content.Headers.TryAddWithoutValidation("Content-Type", new[] {request.ContentType});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return content;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private HttpMethod MapMethod(HttpRequest request)
 | 
					        private HttpMethod MapMethod(HttpRequest request)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,7 +31,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  <ItemGroup>
 | 
					  <ItemGroup>
 | 
				
			||||||
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0-preview-20170106-08" />
 | 
					    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0-preview-20170106-08" />
 | 
				
			||||||
    <PackageReference Include="xunit.runner.visualstudio" Version="2.2.0-beta5-build1225" />
 | 
					    <PackageReference Include="xunit.runner.visualstudio" Version="2.3.0-beta2-build1317" />
 | 
				
			||||||
    <PackageReference Include="Microsoft.AspNetCore.Server.IISIntegration" Version="1.1.1" />
 | 
					    <PackageReference Include="Microsoft.AspNetCore.Server.IISIntegration" Version="1.1.1" />
 | 
				
			||||||
    <PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="1.1.1" />
 | 
					    <PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="1.1.1" />
 | 
				
			||||||
    <PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="1.1.1" />
 | 
					    <PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="1.1.1" />
 | 
				
			||||||
@@ -51,7 +51,7 @@
 | 
				
			|||||||
    <PackageReference Include="TestStack.BDDfy" Version="4.3.2" />
 | 
					    <PackageReference Include="TestStack.BDDfy" Version="4.3.2" />
 | 
				
			||||||
    <PackageReference Include="Consul" Version="0.7.2.1" />
 | 
					    <PackageReference Include="Consul" Version="0.7.2.1" />
 | 
				
			||||||
    <PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="1.1.1" />
 | 
					    <PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="1.1.1" />
 | 
				
			||||||
    <PackageReference Include="xunit" Version="2.2.0-beta5-build3474" />
 | 
					    <PackageReference Include="xunit" Version="2.3.0-beta2-build3683" />
 | 
				
			||||||
  </ItemGroup>
 | 
					  </ItemGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
</Project>
 | 
					</Project>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,7 +31,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  <ItemGroup>
 | 
					  <ItemGroup>
 | 
				
			||||||
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0-preview-20170106-08" />
 | 
					    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0-preview-20170106-08" />
 | 
				
			||||||
    <PackageReference Include="xunit.runner.visualstudio" Version="2.2.0-beta5-build1225" />
 | 
					    <PackageReference Include="xunit.runner.visualstudio" Version="2.3.0-beta2-build1317" />
 | 
				
			||||||
    <PackageReference Include="Microsoft.AspNetCore.Server.IISIntegration" Version="1.1.1" />
 | 
					    <PackageReference Include="Microsoft.AspNetCore.Server.IISIntegration" Version="1.1.1" />
 | 
				
			||||||
    <PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="1.1.1" />
 | 
					    <PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="1.1.1" />
 | 
				
			||||||
    <PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="1.1.1" />
 | 
					    <PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="1.1.1" />
 | 
				
			||||||
@@ -42,7 +42,7 @@
 | 
				
			|||||||
    <PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="1.1.1" />
 | 
					    <PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="1.1.1" />
 | 
				
			||||||
    <PackageReference Include="Microsoft.AspNetCore.Http" Version="1.1.1" />
 | 
					    <PackageReference Include="Microsoft.AspNetCore.Http" Version="1.1.1" />
 | 
				
			||||||
    <PackageReference Include="Microsoft.DotNet.InternalAbstractions" Version="1.0.0" />
 | 
					    <PackageReference Include="Microsoft.DotNet.InternalAbstractions" Version="1.0.0" />
 | 
				
			||||||
    <PackageReference Include="xunit" Version="2.2.0-beta5-build3474" />
 | 
					    <PackageReference Include="xunit" Version="2.3.0-beta2-build3683" />
 | 
				
			||||||
    <PackageReference Include="Microsoft.AspNetCore.TestHost" Version="1.1.1" />
 | 
					    <PackageReference Include="Microsoft.AspNetCore.TestHost" Version="1.1.1" />
 | 
				
			||||||
    <PackageReference Include="IdentityServer4" Version="1.0.1" />
 | 
					    <PackageReference Include="IdentityServer4" Version="1.0.1" />
 | 
				
			||||||
    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.2" />
 | 
					    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.2" />
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,6 +14,11 @@
 | 
				
			|||||||
    <GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
 | 
					    <GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
 | 
				
			||||||
  </PropertyGroup>
 | 
					  </PropertyGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
 | 
				
			||||||
 | 
					    <DebugType>full</DebugType>
 | 
				
			||||||
 | 
					    <DebugSymbols>True</DebugSymbols>
 | 
				
			||||||
 | 
					  </PropertyGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  <ItemGroup>
 | 
					  <ItemGroup>
 | 
				
			||||||
    <ProjectReference Include="..\..\src\Ocelot\Ocelot.csproj" />
 | 
					    <ProjectReference Include="..\..\src\Ocelot\Ocelot.csproj" />
 | 
				
			||||||
  </ItemGroup>
 | 
					  </ItemGroup>
 | 
				
			||||||
@@ -24,7 +29,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  <ItemGroup>
 | 
					  <ItemGroup>
 | 
				
			||||||
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0-preview-20170106-08" />
 | 
					    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0-preview-20170106-08" />
 | 
				
			||||||
    <PackageReference Include="xunit.runner.visualstudio" Version="2.2.0-beta5-build1225" />
 | 
					    <PackageReference Include="xunit.runner.visualstudio" Version="2.3.0-beta2-build1317" />
 | 
				
			||||||
    <PackageReference Include="Microsoft.AspNetCore.Authentication.OAuth" Version="1.1.1" />
 | 
					    <PackageReference Include="Microsoft.AspNetCore.Authentication.OAuth" Version="1.1.1" />
 | 
				
			||||||
    <PackageReference Include="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="1.1.1" />
 | 
					    <PackageReference Include="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="1.1.1" />
 | 
				
			||||||
    <PackageReference Include="Microsoft.AspNetCore.Http" Version="1.1.1" />
 | 
					    <PackageReference Include="Microsoft.AspNetCore.Http" Version="1.1.1" />
 | 
				
			||||||
@@ -43,7 +48,7 @@
 | 
				
			|||||||
    <PackageReference Include="Moq" Version="4.6.38-alpha" />
 | 
					    <PackageReference Include="Moq" Version="4.6.38-alpha" />
 | 
				
			||||||
    <PackageReference Include="Shouldly" Version="2.8.2" />
 | 
					    <PackageReference Include="Shouldly" Version="2.8.2" />
 | 
				
			||||||
    <PackageReference Include="TestStack.BDDfy" Version="4.3.2" />
 | 
					    <PackageReference Include="TestStack.BDDfy" Version="4.3.2" />
 | 
				
			||||||
    <PackageReference Include="xunit" Version="2.2.0-beta5-build3474" />
 | 
					    <PackageReference Include="xunit" Version="2.3.0-beta2-build3683" />
 | 
				
			||||||
  </ItemGroup>
 | 
					  </ItemGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
</Project>
 | 
					</Project>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -117,6 +117,35 @@
 | 
				
			|||||||
                .BDDfy();
 | 
					                .BDDfy();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [Fact]
 | 
				
			||||||
 | 
					        public void Should_map_content_type_header()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            this.Given(_ => GivenTheInputRequestHasContent("This is my content"))
 | 
				
			||||||
 | 
					                .And(_ => GivenTheContentTypeIs("application/json"))
 | 
				
			||||||
 | 
					                .And(_ => GivenTheInputRequestHasMethod("GET"))
 | 
				
			||||||
 | 
					                .And(_ => GivenTheInputRequestHasAValidUri())
 | 
				
			||||||
 | 
					                .When(_ => WhenMapped())
 | 
				
			||||||
 | 
					                .Then(_ => ThenNoErrorIsReturned())
 | 
				
			||||||
 | 
					                .And(_ => ThenTheMappedRequestHasContentTypeHeader("application/json"))
 | 
				
			||||||
 | 
					                .And(_ => ThenTheMappedRequestHasContentSize("This is my content".Length))
 | 
				
			||||||
 | 
					                .BDDfy();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private void GivenTheContentTypeIs(string contentType)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            _inputRequest.ContentType = contentType;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private void ThenTheMappedRequestHasContentTypeHeader(string expected)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            _mappedRequest.Data.Content.Headers.ContentType.MediaType.ShouldBe(expected);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private void ThenTheMappedRequestHasContentSize(long expected)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            _mappedRequest.Data.Content.Headers.ContentLength.ShouldBe(expected);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Fact]
 | 
					        [Fact]
 | 
				
			||||||
        public void Should_handle_no_content()
 | 
					        public void Should_handle_no_content()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user