diff --git a/test/Ocelot.AcceptanceTests/AuthenticationTests.cs b/test/Ocelot.AcceptanceTests/AuthenticationTests.cs index 06214f54..4c68d85b 100644 --- a/test/Ocelot.AcceptanceTests/AuthenticationTests.cs +++ b/test/Ocelot.AcceptanceTests/AuthenticationTests.cs @@ -19,7 +19,6 @@ namespace Ocelot.AcceptanceTests { private IWebHost _servicebuilder; private readonly Steps _steps; - private BearerToken _token; private IWebHost _identityServerBuilder; private string _identityServerRootUrl = "http://localhost:51888"; private string _downstreamServiceRootUrl = "http://localhost:51876/"; diff --git a/test/Ocelot.AcceptanceTests/ClaimsToHeadersForwardingTests.cs b/test/Ocelot.AcceptanceTests/ClaimsToHeadersForwardingTests.cs index 3a9fb040..0569c90a 100644 --- a/test/Ocelot.AcceptanceTests/ClaimsToHeadersForwardingTests.cs +++ b/test/Ocelot.AcceptanceTests/ClaimsToHeadersForwardingTests.cs @@ -3,20 +3,14 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; -using System.Net.Http; -using System.Net.Http.Headers; using System.Security.Claims; using IdentityServer4.Models; using IdentityServer4.Services.InMemory; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.TestHost; using Microsoft.Extensions.DependencyInjection; -using Newtonsoft.Json; using Ocelot.Configuration.Yaml; -using Ocelot.ManualTest; -using Shouldly; using TestStack.BDDfy; using Xunit; @@ -25,11 +19,7 @@ namespace Ocelot.AcceptanceTests { public class ClaimsToHeadersForwardingTests : IDisposable { - private TestServer _ocelotServer; - private HttpClient _ocelotClient; - private HttpResponseMessage _response; private IWebHost _servicebuilder; - private BearerToken _token; private IWebHost _identityServerBuilder; private readonly Steps _steps; @@ -54,12 +44,9 @@ namespace Ocelot.AcceptanceTests } }; - this.Given(x => x.GivenThereIsAnIdentityServerOn("http://localhost:52888", "api", AccessTokenType.Jwt, user)) - .And(x => x.GivenThereIsAServiceRunningOn("http://localhost:52876", 200)) - .And(x => x.GivenIHaveAToken("http://localhost:52888")) - .And(x => _steps.GivenThereIsAConfiguration(new YamlConfiguration - { - ReRoutes = new List + var yamlConfiguration = new YamlConfiguration + { + ReRoutes = new List { new YamlReRoute { @@ -87,36 +74,20 @@ namespace Ocelot.AcceptanceTests } } } - })) - .And(x => x.GivenTheApiGatewayIsRunning()) - .And(x => x.GivenIHaveAddedATokenToMyRequest()) - .When(x => x.WhenIGetUrlOnTheApiGateway("/")) - .Then(x => x.ThenTheStatusCodeShouldBe(HttpStatusCode.OK)) - .And(x => x.ThenTheResponseBodyShouldBe("CustomerId: 123 LocationId: 1 UserType: registered UserId: 1231231")) + }; + + this.Given(x => x.GivenThereIsAnIdentityServerOn("http://localhost:52888", "api", AccessTokenType.Jwt, user)) + .And(x => x.GivenThereIsAServiceRunningOn("http://localhost:52876", 200)) + .And(x => _steps.GivenIHaveAToken("http://localhost:52888")) + .And(x => _steps.GivenThereIsAConfiguration(yamlConfiguration)) + .And(x => _steps.GivenOcelotIsRunning()) + .And(x => _steps.GivenIHaveAddedATokenToMyRequest()) + .When(x => _steps.WhenIGetUrlOnTheApiGateway("/")) + .Then(x => _steps.ThenTheStatusCodeShouldBe(HttpStatusCode.OK)) + .And(x => _steps.ThenTheResponseBodyShouldBe("CustomerId: 123 LocationId: 1 UserType: registered UserId: 1231231")) .BDDfy(); } - private void WhenIGetUrlOnTheApiGateway(string url) - { - _response = _ocelotClient.GetAsync(url).Result; - } - - private void ThenTheResponseBodyShouldBe(string expectedBody) - { - _response.Content.ReadAsStringAsync().Result.ShouldBe(expectedBody); - } - - /// - /// This is annoying cos it should be in the constructor but we need to set up the yaml file before calling startup so its a step. - /// - private void GivenTheApiGatewayIsRunning() - { - _ocelotServer = new TestServer(new WebHostBuilder() - .UseStartup()); - - _ocelotClient = _ocelotServer.CreateClient(); - } - private void GivenThereIsAServiceRunningOn(string url, int statusCode) { _servicebuilder = new WebHostBuilder() @@ -203,71 +174,14 @@ namespace Ocelot.AcceptanceTests _identityServerBuilder.Start(); - VerifyIdentiryServerStarted(url); - - } - - private void VerifyIdentiryServerStarted(string url) - { - using (var httpClient = new HttpClient()) - { - var response = httpClient.GetAsync($"{url}/.well-known/openid-configuration").Result; - response.EnsureSuccessStatusCode(); - } - } - - private void GivenIHaveAToken(string url) - { - var tokenUrl = $"{url}/connect/token"; - var formData = new List> - { - new KeyValuePair("client_id", "client"), - new KeyValuePair("client_secret", "secret"), - new KeyValuePair("scope", "api"), - new KeyValuePair("username", "test"), - new KeyValuePair("password", "test"), - new KeyValuePair("grant_type", "password") - }; - var content = new FormUrlEncodedContent(formData); - - using (var httpClient = new HttpClient()) - { - var response = httpClient.PostAsync(tokenUrl, content).Result; - response.EnsureSuccessStatusCode(); - var responseContent = response.Content.ReadAsStringAsync().Result; - _token = JsonConvert.DeserializeObject(responseContent); - } - } - - private void GivenIHaveAddedATokenToMyRequest() - { - _ocelotClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _token.AccessToken); - } - - private void ThenTheStatusCodeShouldBe(HttpStatusCode expectedHttpStatusCode) - { - _response.StatusCode.ShouldBe(expectedHttpStatusCode); + _steps.VerifyIdentiryServerStarted(url); } public void Dispose() { _servicebuilder?.Dispose(); - _ocelotClient?.Dispose(); - _ocelotServer?.Dispose(); + _steps.Dispose(); _identityServerBuilder?.Dispose(); } - - // ReSharper disable once ClassNeverInstantiated.Local - class BearerToken - { - [JsonProperty("access_token")] - public string AccessToken { get; set; } - - [JsonProperty("expires_in")] - public int ExpiresIn { get; set; } - - [JsonProperty("token_type")] - public string TokenType { get; set; } - } } } diff --git a/test/Ocelot.AcceptanceTests/CustomMiddlewareTests.cs b/test/Ocelot.AcceptanceTests/CustomMiddlewareTests.cs index ce11d346..b5b63e5c 100644 --- a/test/Ocelot.AcceptanceTests/CustomMiddlewareTests.cs +++ b/test/Ocelot.AcceptanceTests/CustomMiddlewareTests.cs @@ -6,15 +6,10 @@ using System.Net.Http; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.TestHost; -using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; using Ocelot.Configuration.Yaml; -using Ocelot.DependencyInjection; using Ocelot.Middleware; using Ocelot.ScopedData; -using Shouldly; using TestStack.BDDfy; using Xunit; @@ -22,9 +17,6 @@ namespace Ocelot.AcceptanceTests { public class CustomMiddlewareTests : IDisposable { - private TestServer _server; - private HttpClient _client; - private HttpResponseMessage _response; private readonly string _configurationPath; private IWebHost _builder; private readonly Steps _steps; @@ -32,7 +24,7 @@ namespace Ocelot.AcceptanceTests public CustomMiddlewareTests() { _steps = new Steps();; - _configurationPath = $"configuration.yaml"; + _configurationPath = "configuration.yaml"; } [Fact] @@ -46,10 +38,9 @@ namespace Ocelot.AcceptanceTests } }; - this.Given(x => x.GivenThereIsAServiceRunningOn("http://localhost:41879", 200)) - .And(x => _steps.GivenThereIsAConfiguration(new YamlConfiguration - { - ReRoutes = new List + var yamlConfiguration = new YamlConfiguration + { + ReRoutes = new List { new YamlReRoute { @@ -58,11 +49,14 @@ namespace Ocelot.AcceptanceTests UpstreamHttpMethod = "Get", } } - }, _configurationPath)) - .And(x => x.GivenOcelotIsRunning(configuration)) - .When(x => x.WhenIGetUrlOnTheApiGateway("/")) - .Then(x => x.ThenTheStatusCodeShouldBe(HttpStatusCode.OK)) - .And(x => x.ThenTheResponseBodyShouldBe("PreHttpResponderMiddleware")) + }; + + this.Given(x => x.GivenThereIsAServiceRunningOn("http://localhost:41879", 200)) + .And(x => _steps.GivenThereIsAConfiguration(yamlConfiguration, _configurationPath)) + .And(x => _steps.GivenOcelotIsRunning(configuration)) + .When(x => _steps.WhenIGetUrlOnTheApiGateway("/")) + .Then(x => _steps.ThenTheStatusCodeShouldBe(HttpStatusCode.OK)) + .And(x => _steps.ThenTheResponseBodyShouldBe("PreHttpResponderMiddleware")) .BDDfy(); } @@ -78,10 +72,9 @@ namespace Ocelot.AcceptanceTests } }; - this.Given(x => x.GivenThereIsAServiceRunningOn("http://localhost:41879", 200)) - .And(x => _steps.GivenThereIsAConfiguration(new YamlConfiguration - { - ReRoutes = new List + var yamlConfiguration = new YamlConfiguration + { + ReRoutes = new List { new YamlReRoute { @@ -90,49 +83,17 @@ namespace Ocelot.AcceptanceTests UpstreamHttpMethod = "Get", } } - }, _configurationPath)) - .And(x => x.GivenOcelotIsRunning(configuration)) - .When(x => x.WhenIGetUrlOnTheApiGateway("/")) - .Then(x => x.ThenTheStatusCodeShouldBe(HttpStatusCode.OK)) - .And(x => x.ThenTheResponseBodyShouldBe("PreHttpRequesterMiddleware")) + }; + + this.Given(x => x.GivenThereIsAServiceRunningOn("http://localhost:41879", 200)) + .And(x => _steps.GivenThereIsAConfiguration(yamlConfiguration, _configurationPath)) + .And(x => _steps.GivenOcelotIsRunning(configuration)) + .When(x => _steps.WhenIGetUrlOnTheApiGateway("/")) + .Then(x => _steps.ThenTheStatusCodeShouldBe(HttpStatusCode.OK)) + .And(x => _steps.ThenTheResponseBodyShouldBe("PreHttpRequesterMiddleware")) .BDDfy(); } - - - /// - /// This is annoying cos it should be in the constructor but we need to set up the yaml file before calling startup so its a step. - /// - private void GivenOcelotIsRunning(OcelotMiddlewareConfiguration ocelotMiddlewareConfig) - { - var builder = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) - .AddYamlFile("configuration.yaml") - .AddEnvironmentVariables(); - - var configuration = builder.Build(); - - _server = new TestServer(new WebHostBuilder() - .UseConfiguration(configuration) - .ConfigureServices(s => - { - s.AddOcelotYamlConfiguration(configuration); - s.AddOcelot(); - }) - .ConfigureLogging(l => - { - l.AddConsole(configuration.GetSection("Logging")); - l.AddDebug(); - }) - .Configure(a => - { - a.UseOcelot(ocelotMiddlewareConfig); - })); - - _client = _server.CreateClient(); - } - private void GivenThereIsAServiceRunningOn(string url, int statusCode) { _builder = new WebHostBuilder() @@ -153,26 +114,10 @@ namespace Ocelot.AcceptanceTests _builder.Start(); } - private void WhenIGetUrlOnTheApiGateway(string url) - { - _response = _client.GetAsync(url).Result; - } - - private void ThenTheStatusCodeShouldBe(HttpStatusCode expectedHttpStatusCode) - { - _response.StatusCode.ShouldBe(expectedHttpStatusCode); - } - - private void ThenTheResponseBodyShouldBe(string expectedBody) - { - _response.Content.ReadAsStringAsync().Result.ShouldBe(expectedBody); - } - public void Dispose() { _builder?.Dispose(); - _client.Dispose(); - _server.Dispose(); + _steps.Dispose(); } } } diff --git a/test/Ocelot.AcceptanceTests/ReturnsErrorTests.cs b/test/Ocelot.AcceptanceTests/ReturnsErrorTests.cs index 1b61281a..1feb8f67 100644 --- a/test/Ocelot.AcceptanceTests/ReturnsErrorTests.cs +++ b/test/Ocelot.AcceptanceTests/ReturnsErrorTests.cs @@ -2,13 +2,9 @@ using System.Collections.Generic; using System.IO; using System.Net; -using System.Net.Http; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; -using Microsoft.AspNetCore.TestHost; using Ocelot.Configuration.Yaml; -using Ocelot.ManualTest; -using Shouldly; using TestStack.BDDfy; using Xunit; @@ -16,9 +12,6 @@ namespace Ocelot.AcceptanceTests { public class ReturnsErrorTests : IDisposable { - private TestServer _ocelotServer; - private HttpClient _ocelotClient; - private HttpResponseMessage _response; private IWebHost _servicebuilder; private readonly Steps _steps; @@ -30,10 +23,9 @@ namespace Ocelot.AcceptanceTests [Fact] public void should_return_response_200_and_foward_claim_as_header() { - this.Given(x => x.GivenThereIsAServiceRunningOn("http://localhost:53876")) - .And(x => _steps.GivenThereIsAConfiguration(new YamlConfiguration - { - ReRoutes = new List + var yamlConfiguration = new YamlConfiguration + { + ReRoutes = new List { new YamlReRoute { @@ -42,34 +34,16 @@ namespace Ocelot.AcceptanceTests UpstreamHttpMethod = "Get", } } - })) - .And(x => x.GivenTheApiGatewayIsRunning()) - .When(x => x.WhenIGetUrlOnTheApiGateway("/")) - .Then(x => x.ThenTheStatusCodeShouldBe(HttpStatusCode.InternalServerError)) + }; + + this.Given(x => x.GivenThereIsAServiceRunningOn("http://localhost:53876")) + .And(x => _steps.GivenThereIsAConfiguration(yamlConfiguration)) + .And(x => _steps.GivenOcelotIsRunning()) + .When(x => _steps.WhenIGetUrlOnTheApiGateway("/")) + .Then(x => _steps.ThenTheStatusCodeShouldBe(HttpStatusCode.InternalServerError)) .BDDfy(); } - private void WhenIGetUrlOnTheApiGateway(string url) - { - _response = _ocelotClient.GetAsync(url).Result; - } - - private void ThenTheResponseBodyShouldBe(string expectedBody) - { - _response.Content.ReadAsStringAsync().Result.ShouldBe(expectedBody); - } - - /// - /// This is annoying cos it should be in the constructor but we need to set up the yaml file before calling startup so its a step. - /// - private void GivenTheApiGatewayIsRunning() - { - _ocelotServer = new TestServer(new WebHostBuilder() - .UseStartup()); - - _ocelotClient = _ocelotServer.CreateClient(); - } - private void GivenThereIsAServiceRunningOn(string url) { _servicebuilder = new WebHostBuilder() @@ -90,16 +64,10 @@ namespace Ocelot.AcceptanceTests _servicebuilder.Start(); } - private void ThenTheStatusCodeShouldBe(HttpStatusCode expectedHttpStatusCode) - { - _response.StatusCode.ShouldBe(expectedHttpStatusCode); - } - public void Dispose() { _servicebuilder?.Dispose(); - _ocelotClient?.Dispose(); - _ocelotServer?.Dispose(); + _steps.Dispose(); } } } diff --git a/test/Ocelot.AcceptanceTests/RoutingTests.cs b/test/Ocelot.AcceptanceTests/RoutingTests.cs index 19b3c54a..8f027266 100644 --- a/test/Ocelot.AcceptanceTests/RoutingTests.cs +++ b/test/Ocelot.AcceptanceTests/RoutingTests.cs @@ -2,14 +2,10 @@ using System; using System.Collections.Generic; using System.IO; using System.Net; -using System.Net.Http; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.TestHost; using Ocelot.Configuration.Yaml; -using Ocelot.ManualTest; -using Shouldly; using TestStack.BDDfy; using Xunit; @@ -17,10 +13,6 @@ namespace Ocelot.AcceptanceTests { public class RoutingTests : IDisposable { - private TestServer _server; - private HttpClient _client; - private HttpResponseMessage _response; - private StringContent _postContent; private IWebHost _builder; private readonly Steps _steps; @@ -33,19 +25,18 @@ namespace Ocelot.AcceptanceTests public void should_return_response_404_when_no_configuration_at_all() { this.Given(x => _steps.GivenThereIsAConfiguration(new YamlConfiguration())) - .And(x => x.GivenTheApiGatewayIsRunning()) - .When(x => x.WhenIGetUrlOnTheApiGateway("/")) - .Then(x => x.ThenTheStatusCodeShouldBe(HttpStatusCode.NotFound)) + .And(x => _steps.GivenOcelotIsRunning()) + .When(x => _steps.WhenIGetUrlOnTheApiGateway("/")) + .Then(x => _steps.ThenTheStatusCodeShouldBe(HttpStatusCode.NotFound)) .BDDfy(); } [Fact] public void should_return_response_200_with_simple_url() { - this.Given(x => x.GivenThereIsAServiceRunningOn("http://localhost:51879", 200, "Hello from Laura")) - .And(x => _steps.GivenThereIsAConfiguration(new YamlConfiguration - { - ReRoutes = new List + var yamlConfiguration = new YamlConfiguration + { + ReRoutes = new List { new YamlReRoute { @@ -54,21 +45,23 @@ namespace Ocelot.AcceptanceTests UpstreamHttpMethod = "Get", } } - })) - .And(x => x.GivenTheApiGatewayIsRunning()) - .When(x => x.WhenIGetUrlOnTheApiGateway("/")) - .Then(x => x.ThenTheStatusCodeShouldBe(HttpStatusCode.OK)) - .And(x => x.ThenTheResponseBodyShouldBe("Hello from Laura")) + }; + + this.Given(x => x.GivenThereIsAServiceRunningOn("http://localhost:51879", 200, "Hello from Laura")) + .And(x => _steps.GivenThereIsAConfiguration(yamlConfiguration)) + .And(x => _steps.GivenOcelotIsRunning()) + .When(x => _steps.WhenIGetUrlOnTheApiGateway("/")) + .Then(x => _steps.ThenTheStatusCodeShouldBe(HttpStatusCode.OK)) + .And(x => _steps.ThenTheResponseBodyShouldBe("Hello from Laura")) .BDDfy(); } [Fact] public void should_return_response_200_with_complex_url() { - this.Given(x => x.GivenThereIsAServiceRunningOn("http://localhost:51879/api/products/1", 200, "Some Product")) - .And(x => _steps.GivenThereIsAConfiguration(new YamlConfiguration - { - ReRoutes = new List + var yamlConfiguration = new YamlConfiguration + { + ReRoutes = new List { new YamlReRoute { @@ -77,21 +70,23 @@ namespace Ocelot.AcceptanceTests UpstreamHttpMethod = "Get" } } - })) - .And(x => x.GivenTheApiGatewayIsRunning()) - .When(x => x.WhenIGetUrlOnTheApiGateway("/products/1")) - .Then(x => x.ThenTheStatusCodeShouldBe(HttpStatusCode.OK)) - .And(x => x.ThenTheResponseBodyShouldBe("Some Product")) + }; + + this.Given(x => x.GivenThereIsAServiceRunningOn("http://localhost:51879/api/products/1", 200, "Some Product")) + .And(x => _steps.GivenThereIsAConfiguration(yamlConfiguration)) + .And(x => _steps.GivenOcelotIsRunning()) + .When(x => _steps.WhenIGetUrlOnTheApiGateway("/products/1")) + .Then(x => _steps.ThenTheStatusCodeShouldBe(HttpStatusCode.OK)) + .And(x => _steps.ThenTheResponseBodyShouldBe("Some Product")) .BDDfy(); } [Fact] public void should_return_response_201_with_simple_url() { - this.Given(x => x.GivenThereIsAServiceRunningOn("http://localhost:51879", 201, string.Empty)) - .And(x => _steps.GivenThereIsAConfiguration(new YamlConfiguration - { - ReRoutes = new List + var yamlConfiguration = new YamlConfiguration + { + ReRoutes = new List { new YamlReRoute { @@ -100,30 +95,17 @@ namespace Ocelot.AcceptanceTests UpstreamHttpMethod = "Post" } } - })) - .And(x => x.GivenTheApiGatewayIsRunning()) - .And(x => x.GivenThePostHasContent("postContent")) - .When(x => x.WhenIPostUrlOnTheApiGateway("/")) - .Then(x => x.ThenTheStatusCodeShouldBe(HttpStatusCode.Created)) + }; + + this.Given(x => x.GivenThereIsAServiceRunningOn("http://localhost:51879", 201, string.Empty)) + .And(x => _steps.GivenThereIsAConfiguration(yamlConfiguration)) + .And(x => _steps.GivenOcelotIsRunning()) + .And(x => _steps.GivenThePostHasContent("postContent")) + .When(x => _steps.WhenIPostUrlOnTheApiGateway("/")) + .Then(x => _steps.ThenTheStatusCodeShouldBe(HttpStatusCode.Created)) .BDDfy(); } - private void GivenThePostHasContent(string postcontent) - { - _postContent = new StringContent(postcontent); - } - - /// - /// This is annoying cos it should be in the constructor but we need to set up the yaml file before calling startup so its a step. - /// - private void GivenTheApiGatewayIsRunning() - { - _server = new TestServer(new WebHostBuilder() - .UseStartup()); - - _client = _server.CreateClient(); - } - private void GivenThereIsAServiceRunningOn(string url, int statusCode, string responseBody) { _builder = new WebHostBuilder() @@ -145,31 +127,10 @@ namespace Ocelot.AcceptanceTests _builder.Start(); } - private void WhenIGetUrlOnTheApiGateway(string url) - { - _response = _client.GetAsync(url).Result; - } - - private void WhenIPostUrlOnTheApiGateway(string url) - { - _response = _client.PostAsync(url, _postContent).Result; - } - - private void ThenTheStatusCodeShouldBe(HttpStatusCode expectedHttpStatusCode) - { - _response.StatusCode.ShouldBe(expectedHttpStatusCode); - } - - private void ThenTheResponseBodyShouldBe(string expectedBody) - { - _response.Content.ReadAsStringAsync().Result.ShouldBe(expectedBody); - } - public void Dispose() { _builder?.Dispose(); - _client.Dispose(); - _server.Dispose(); + _steps.Dispose(); } } } diff --git a/test/Ocelot.AcceptanceTests/Steps.cs b/test/Ocelot.AcceptanceTests/Steps.cs index 7b90630f..b9f94f17 100644 --- a/test/Ocelot.AcceptanceTests/Steps.cs +++ b/test/Ocelot.AcceptanceTests/Steps.cs @@ -6,9 +6,13 @@ using System.Net.Http; using System.Net.Http.Headers; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.TestHost; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; using Newtonsoft.Json; using Ocelot.Configuration.Yaml; +using Ocelot.DependencyInjection; using Ocelot.ManualTest; +using Ocelot.Middleware; using Shouldly; using YamlDotNet.Serialization; @@ -21,7 +25,6 @@ namespace Ocelot.AcceptanceTests private HttpResponseMessage _response; private HttpContent _postContent; private BearerToken _token; - public HttpClient OcelotClient => _ocelotClient; public void GivenThereIsAConfiguration(YamlConfiguration yamlConfiguration) @@ -67,6 +70,39 @@ namespace Ocelot.AcceptanceTests _ocelotClient = _ocelotServer.CreateClient(); } + /// + /// This is annoying cos it should be in the constructor but we need to set up the yaml file before calling startup so its a step. + /// + public void GivenOcelotIsRunning(OcelotMiddlewareConfiguration ocelotMiddlewareConfig) + { + var builder = new ConfigurationBuilder() + .SetBasePath(Directory.GetCurrentDirectory()) + .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) + .AddYamlFile("configuration.yaml") + .AddEnvironmentVariables(); + + var configuration = builder.Build(); + + _ocelotServer = new TestServer(new WebHostBuilder() + .UseConfiguration(configuration) + .ConfigureServices(s => + { + s.AddOcelotYamlConfiguration(configuration); + s.AddOcelot(); + }) + .ConfigureLogging(l => + { + l.AddConsole(configuration.GetSection("Logging")); + l.AddDebug(); + }) + .Configure(a => + { + a.UseOcelot(ocelotMiddlewareConfig); + })); + + _ocelotClient = _ocelotServer.CreateClient(); + } + public void GivenIHaveAddedATokenToMyRequest() { _ocelotClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _token.AccessToken); @@ -95,6 +131,16 @@ namespace Ocelot.AcceptanceTests } } + public void VerifyIdentiryServerStarted(string url) + { + using (var httpClient = new HttpClient()) + { + var response = httpClient.GetAsync($"{url}/.well-known/openid-configuration").Result; + response.EnsureSuccessStatusCode(); + } + } + + public void WhenIGetUrlOnTheApiGateway(string url) { _response = _ocelotClient.GetAsync(url).Result;