From 1168eb311042613360b121cf3e1eb453189f33ae Mon Sep 17 00:00:00 2001 From: Nick Sharp Date: Thu, 29 Jun 2017 08:58:41 +0100 Subject: [PATCH] Reenabling some tests --- .../FileConfigurationCreatorTests.cs | 234 ++++++++---------- .../TestData/AuthenticationConfigTestData.cs | 89 +++++++ 2 files changed, 190 insertions(+), 133 deletions(-) create mode 100644 test/Ocelot.UnitTests/TestData/AuthenticationConfigTestData.cs diff --git a/test/Ocelot.UnitTests/Configuration/FileConfigurationCreatorTests.cs b/test/Ocelot.UnitTests/Configuration/FileConfigurationCreatorTests.cs index 8a701f31..f7f59c97 100644 --- a/test/Ocelot.UnitTests/Configuration/FileConfigurationCreatorTests.cs +++ b/test/Ocelot.UnitTests/Configuration/FileConfigurationCreatorTests.cs @@ -17,6 +17,10 @@ using Xunit; namespace Ocelot.UnitTests.Configuration { + using System.Collections; + + using Ocelot.UnitTests.TestData; + public class FileConfigurationCreatorTests { private readonly Mock> _fileConfig; @@ -393,132 +397,82 @@ namespace Ocelot.UnitTests.Configuration .BDDfy(); } - //[Fact] - //public void should_create_with_headers_to_extract() - //{ - // var reRouteOptions = new ReRouteOptionsBuilder() - // .WithIsAuthenticated(true) - // .Build(); + [Theory] + [MemberData(nameof(AuthenticationConfigTestData.GetAuthenticationData), MemberType = typeof(AuthenticationConfigTestData))] + public void should_create_with_headers_to_extract(string provider, IAuthenticationConfig config, FileConfiguration fileConfig) + { + var reRouteOptions = new ReRouteOptionsBuilder() + .WithIsAuthenticated(true) + .Build(); - // var authenticationOptions = new AuthenticationOptionsBuilder() - // .WithProvider("IdentityServer") - // .WithProviderRootUrl("http://localhost:51888") - // .WithRequireHttps(false) - // .WithApiSecret("secret") - // .WithApiName("api") - // .WithAllowedScopes(new List()) - // .Build(); + var authenticationOptions = new AuthenticationOptionsBuilder() + .WithProvider(provider) + .WithAllowedScopes(new List()) + .WithConfig(config) + .Build(); - // var expected = new List - // { - // new ReRouteBuilder() - // .WithDownstreamPathTemplate("/products/{productId}") - // .WithUpstreamPathTemplate("/api/products/{productId}") - // .WithUpstreamHttpMethod(new List { "Get" }) - // .WithAuthenticationOptions(authenticationOptions) - // .WithClaimsToHeaders(new List - // { - // new ClaimToThing("CustomerId", "CustomerId", "", 0), - // }) - // .Build() - // }; + var expected = new List + { + new ReRouteBuilder() + .WithDownstreamPathTemplate("/products/{productId}") + .WithUpstreamPathTemplate("/api/products/{productId}") + .WithUpstreamHttpMethod(new List { "Get" }) + .WithAuthenticationOptions(authenticationOptions) + .WithClaimsToHeaders(new List + { + new ClaimToThing("CustomerId", "CustomerId", "", 0), + }) + .Build() + }; - // this.Given(x => x.GivenTheConfigIs(new FileConfiguration - // { - // ReRoutes = new List - // { - // new FileReRoute - // { - // UpstreamPathTemplate = "/api/products/{productId}", - // DownstreamPathTemplate = "/products/{productId}", - // UpstreamHttpMethod = new List { "Get" }, - // ReRouteIsCaseSensitive = true, - // AuthenticationOptions = new FileAuthenticationOptions - // { - //AllowedScopes= new List(), - // Provider = "IdentityServer", - // ProviderRootUrl = "http://localhost:51888", - // RequireHttps = false, - //ApiName= "api", - // ApiSecret = "secret" - // }, - // AddHeadersToRequest = - // { - // {"CustomerId", "Claims[CustomerId] > value"}, - // } - // } - // } - // })) - // .And(x => x.GivenTheConfigIsValid()) - // .And(x => x.GivenTheAuthOptionsCreatorReturns(authenticationOptions)) - // .And(x => x.GivenTheFollowingOptionsAreReturned(reRouteOptions)) - // .And(x => x.GivenTheClaimsToThingCreatorReturns(new List{new ClaimToThing("CustomerId", "CustomerId", "", 0)})) - // .And(x => x.GivenTheLoadBalancerFactoryReturns()) - // .When(x => x.WhenICreateTheConfig()) - // .Then(x => x.ThenTheReRoutesAre(expected)) - // .And(x => x.ThenTheAuthenticationOptionsAre(expected)) - // .And(x => x.ThenTheAuthOptionsCreatorIsCalledCorrectly()) - // .BDDfy(); - //} + this.Given(x => x.GivenTheConfigIs(fileConfig)) + .And(x => x.GivenTheConfigIsValid()) + .And(x => x.GivenTheAuthOptionsCreatorReturns(authenticationOptions)) + .And(x => x.GivenTheFollowingOptionsAreReturned(reRouteOptions)) + .And(x => x.GivenTheClaimsToThingCreatorReturns(new List { new ClaimToThing("CustomerId", "CustomerId", "", 0) })) + .And(x => x.GivenTheLoadBalancerFactoryReturns()) + .When(x => x.WhenICreateTheConfig()) + .Then(x => x.ThenTheReRoutesAre(expected)) + .And(x => x.ThenTheAuthenticationOptionsAre(provider, expected)) + .And(x => x.ThenTheAuthOptionsCreatorIsCalledCorrectly()) + .BDDfy(); + } - //[Fact] - //public void should_create_with_authentication_properties() - //{ - // var reRouteOptions = new ReRouteOptionsBuilder() - // .WithIsAuthenticated(true) - // .Build(); + [Theory] + [MemberData(nameof(AuthenticationConfigTestData.GetAuthenticationData), MemberType = typeof(AuthenticationConfigTestData))] + public void should_create_with_authentication_properties(string provider, IAuthenticationConfig config, FileConfiguration fileConfig) + { + var reRouteOptions = new ReRouteOptionsBuilder() + .WithIsAuthenticated(true) + .Build(); - // var authenticationOptions = new AuthenticationOptionsBuilder() - // .WithProvider("IdentityServer") - // .WithProviderRootUrl("http://localhost:51888") - // .WithRequireHttps(false) - // .WithApiSecret("secret") - // .WithApiName("api") - // .WithAllowedScopes(new List()) - // .Build(); + var authenticationOptions = new AuthenticationOptionsBuilder() + .WithProvider(provider) + .WithAllowedScopes(new List()) + .WithConfig(config) + .Build(); - // var expected = new List - // { - // new ReRouteBuilder() - // .WithDownstreamPathTemplate("/products/{productId}") - // .WithUpstreamPathTemplate("/api/products/{productId}") - // .WithUpstreamHttpMethod(new List { "Get" }) - // .WithAuthenticationOptions(authenticationOptions) - // .Build() - // }; + var expected = new List + { + new ReRouteBuilder() + .WithDownstreamPathTemplate("/products/{productId}") + .WithUpstreamPathTemplate("/api/products/{productId}") + .WithUpstreamHttpMethod(new List { "Get" }) + .WithAuthenticationOptions(authenticationOptions) + .Build() + }; - // this.Given(x => x.GivenTheConfigIs(new FileConfiguration - // { - // ReRoutes = new List - // { - // new FileReRoute - // { - // UpstreamPathTemplate = "/api/products/{productId}", - // DownstreamPathTemplate = "/products/{productId}", - // UpstreamHttpMethod = new List { "Get" }, - // ReRouteIsCaseSensitive = true, - // AuthenticationOptions = new FileAuthenticationOptions - // { - //AllowedScopes = new List(), - // Provider = "IdentityServer", - // ProviderRootUrl = "http://localhost:51888", - // RequireHttps = false, - //ApiName= "api", - // ApiSecret = "secret" - // } - // } - // } - // })) - // .And(x => x.GivenTheConfigIsValid()) - // .And(x => x.GivenTheFollowingOptionsAreReturned(reRouteOptions)) - // .And(x => x.GivenTheAuthOptionsCreatorReturns(authenticationOptions)) - // .And(x => x.GivenTheLoadBalancerFactoryReturns()) - // .When(x => x.WhenICreateTheConfig()) - // .Then(x => x.ThenTheReRoutesAre(expected)) - // .And(x => x.ThenTheAuthenticationOptionsAre(expected)) - // .And(x => x.ThenTheAuthOptionsCreatorIsCalledCorrectly()) - // .BDDfy(); - //} + this.Given(x => x.GivenTheConfigIs(fileConfig)) + .And(x => x.GivenTheConfigIsValid()) + .And(x => x.GivenTheFollowingOptionsAreReturned(reRouteOptions)) + .And(x => x.GivenTheAuthOptionsCreatorReturns(authenticationOptions)) + .And(x => x.GivenTheLoadBalancerFactoryReturns()) + .When(x => x.WhenICreateTheConfig()) + .Then(x => x.ThenTheReRoutesAre(expected)) + .And(x => x.ThenTheAuthenticationOptionsAre(provider, expected)) + .And(x => x.ThenTheAuthOptionsCreatorIsCalledCorrectly()) + .BDDfy(); + } private void GivenTheFollowingOptionsAreReturned(ReRouteOptions fileReRouteOptions) { @@ -586,22 +540,36 @@ namespace Ocelot.UnitTests.Configuration } } - //private void ThenTheAuthenticationOptionsAre(List expectedReRoutes) - //{ - // for (int i = 0; i < _config.Data.ReRoutes.Count; i++) - // { - // var result = _config.Data.ReRoutes[i].AuthenticationOptions; - // var expected = expectedReRoutes[i].AuthenticationOptions; + private void ThenTheAuthenticationOptionsAre(string provider, List expectedReRoutes) + { + for (int i = 0; i < _config.Data.ReRoutes.Count; i++) + { + var result = _config.Data.ReRoutes[i].AuthenticationOptions; + var expected = expectedReRoutes[i].AuthenticationOptions; - // result.AllowedScopes.ShouldBe(expected.AllowedScopes); - // result.Provider.ShouldBe(expected.Provider); - // result.ProviderRootUrl.ShouldBe(expected.ProviderRootUrl); - // result.RequireHttps.ShouldBe(expected.RequireHttps); - // result.ApiName.ShouldBe(expected.ApiName); - // result.ApiSecret.ShouldBe(expected.ApiSecret); + result.AllowedScopes.ShouldBe(expected.AllowedScopes); + result.Provider.ShouldBe(expected.Provider); - // } - //} + if (provider.ToLower() == "identityserver") + { + var config = result.Config as IdentityServerConfig; + var expectedConfig = expected.Config as IdentityServerConfig; + + config.ProviderRootUrl.ShouldBe(expectedConfig.ProviderRootUrl); + config.RequireHttps.ShouldBe(expectedConfig.RequireHttps); + config.ApiName.ShouldBe(expectedConfig.ApiName); + config.ApiSecret.ShouldBe(expectedConfig.ApiSecret); + } + else + { + var config = result.Config as JwtConfig; + var expectedConfig = expected.Config as JwtConfig; + + config.Audience.ShouldBe(expectedConfig.Audience); + config.Authority.ShouldBe(expectedConfig.Authority); + } + } + } private void GivenTheLoadBalancerFactoryReturns() { diff --git a/test/Ocelot.UnitTests/TestData/AuthenticationConfigTestData.cs b/test/Ocelot.UnitTests/TestData/AuthenticationConfigTestData.cs new file mode 100644 index 00000000..5392a58d --- /dev/null +++ b/test/Ocelot.UnitTests/TestData/AuthenticationConfigTestData.cs @@ -0,0 +1,89 @@ +namespace Ocelot.UnitTests.TestData +{ + using System.Collections.Generic; + + using Ocelot.Configuration.Builder; + using Ocelot.Configuration.File; + + public class AuthenticationConfigTestData + { + public static IEnumerable GetAuthenticationData() + { + yield return new object[] + { + "IdentityServer", + new IdentityServerConfigBuilder() + .WithRequireHttps(true) + .WithApiName("test") + .WithApiSecret("test") + .WithProviderRootUrl("test") + .Build(), + new FileConfiguration + { + ReRoutes = new List + { + new FileReRoute + { + UpstreamPathTemplate = "/api/products/{productId}", + DownstreamPathTemplate = "/products/{productId}", + UpstreamHttpMethod = new List { "Get" }, + ReRouteIsCaseSensitive = true, + AuthenticationOptions = new FileAuthenticationOptions + { + AllowedScopes = new List(), + Provider = "IdentityServer", + IdentityServerConfig = new FileIdentityServerConfig + { + ProviderRootUrl = "http://localhost:51888", + RequireHttps = false, + ApiName = "api", + ApiSecret = "secret" + } + }, + AddHeadersToRequest = + { + { "CustomerId", "Claims[CustomerId] > value" }, + } + } + } + } + }; + + yield return new object[] + { + "Jwt", + new JwtConfigBuilder() + .WithAudience("a") + .WithAuthority("au") + .Build(), + new FileConfiguration + { + ReRoutes = new List + { + new FileReRoute + { + UpstreamPathTemplate = "/api/products/{productId}", + DownstreamPathTemplate = "/products/{productId}", + UpstreamHttpMethod = new List { "Get" }, + ReRouteIsCaseSensitive = true, + AuthenticationOptions = new FileAuthenticationOptions + { + AllowedScopes = new List(), + Provider = "IdentityServer", + JwtConfig = new FileJwtConfig + { + Audience = "a", + Authority = "au" + } + }, + AddHeadersToRequest = + { + { "CustomerId", "Claims[CustomerId] > value" }, + } + } + } + } + }; + } + } +}