diff --git a/examples/WireMock.Net.Console.Proxy.NETCoreApp2/Program.cs b/examples/WireMock.Net.Console.Proxy.NETCoreApp2/Program.cs index c7f923e1b..73c9e3403 100644 --- a/examples/WireMock.Net.Console.Proxy.NETCoreApp2/Program.cs +++ b/examples/WireMock.Net.Console.Proxy.NETCoreApp2/Program.cs @@ -3,6 +3,7 @@ using System.Threading; using System.Threading.Tasks; using Newtonsoft.Json; +using WireMock.Logging; using WireMock.RequestBuilders; using WireMock.ResponseBuilders; using WireMock.Server; @@ -14,9 +15,6 @@ class Program { static void Main(string[] args) { - RunTestDifferentPort().Wait(20000); // prints "1" - RunTestDifferentPort().Wait(20000); // prints "1" - var server = WireMockServer.Start(new WireMockServerSettings { Urls = new[] { "http://localhost:9091", "https://localhost:9443" }, @@ -29,34 +27,18 @@ static void Main(string[] args) SaveMapping = true, SaveMappingToFile = false, ExcludedHeaders = new[] { "dnt", "Content-Length" } - } + }, + Logger= new WireMockConsoleLogger() }); - server.LogEntriesChanged += (sender, eventRecordArgs) => - { - System.Console.WriteLine(JsonConvert.SerializeObject(eventRecordArgs.NewItems, Formatting.Indented)); - }; + //server.LogEntriesChanged += (sender, eventRecordArgs) => + //{ + // System.Console.WriteLine(JsonConvert.SerializeObject(eventRecordArgs.NewItems, Formatting.Indented)); + //}; System.Console.WriteLine("Press any key to stop the server"); System.Console.ReadKey(); server.Stop(); } - - private static async Task RunTestDifferentPort() - { - var server = WireMockServer.Start(); - - server.Given(Request.Create().WithPath("/").UsingGet()) - .RespondWith(Response.Create().WithStatusCode(200).WithBody("Hello")); - - Thread.Sleep(1000); - - var response = await new HttpClient().GetAsync(server.Urls[0]); - response.EnsureSuccessStatusCode(); - - System.Console.WriteLine("RunTestDifferentPort - server.LogEntries.Count() = " + server.LogEntries.Count()); - - server.Stop(); - } } } diff --git a/examples/WireMock.Net.Console.Proxy.NETCoreApp2/WireMock.Net.Console.Proxy.NETCoreApp2.csproj b/examples/WireMock.Net.Console.Proxy.NETCoreApp2/WireMock.Net.Console.Proxy.NETCoreApp2.csproj index a02ff1c67..a5fc676e4 100644 --- a/examples/WireMock.Net.Console.Proxy.NETCoreApp2/WireMock.Net.Console.Proxy.NETCoreApp2.csproj +++ b/examples/WireMock.Net.Console.Proxy.NETCoreApp2/WireMock.Net.Console.Proxy.NETCoreApp2.csproj @@ -2,7 +2,7 @@ Exe - netcoreapp2.1 + netcoreapp2.1;netcoreapp3.1;net5.0 ../../WireMock.Net-Logo.ico diff --git a/src/WireMock.Net/RequestBuilders/Request.cs b/src/WireMock.Net/RequestBuilders/Request.cs index aeb42be89..184a810b7 100644 --- a/src/WireMock.Net/RequestBuilders/Request.cs +++ b/src/WireMock.Net/RequestBuilders/Request.cs @@ -55,6 +55,16 @@ private Request(IList requestMatchers) : base(requestMatchers) return _requestMatchers.OfType().FirstOrDefault(); } + /// + /// Gets the request message matcher. + /// + /// Type of IRequestMatcher + /// A RequestMatcher + public T GetRequestMessageMatcher(Func func) where T : IRequestMatcher + { + return _requestMatchers.OfType().FirstOrDefault(func); + } + /// public IRequestBuilder WithClientIP(params IStringMatcher[] matchers) { diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithFaultTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithFaultTests.cs index 437ae6a60..d4311fedb 100644 --- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithFaultTests.cs +++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithFaultTests.cs @@ -1,6 +1,5 @@ -using FluentAssertions; -using Moq; -using System.Threading.Tasks; +using System.Threading.Tasks; +using FluentAssertions; using WireMock.Models; using WireMock.ResponseBuilders; using WireMock.Settings; diff --git a/test/WireMock.Net.Tests/WireMockServer.Proxy.cs b/test/WireMock.Net.Tests/WireMockServer.Proxy.cs index 342e17ad5..a07bac254 100644 --- a/test/WireMock.Net.Tests/WireMockServer.Proxy.cs +++ b/test/WireMock.Net.Tests/WireMockServer.Proxy.cs @@ -13,6 +13,7 @@ using WireMock.ResponseBuilders; using WireMock.Server; using WireMock.Settings; +using WireMock.Util; using Xunit; namespace WireMock.Net.Tests @@ -75,8 +76,8 @@ public async Task WireMockServer_Proxy_Should_log_proxied_requests() await new HttpClient(httpClientHandler).SendAsync(requestMessage); // Assert - Check.That(server.Mappings).HasSize(2); - Check.That(server.LogEntries).HasSize(1); + server.Mappings.Should().HaveCount(2); + server.LogEntries.Should().HaveCount(1); } [Fact] @@ -148,10 +149,56 @@ public async Task WireMockServer_Proxy_Should_preserve_content_header_in_proxied // check that new proxied mapping is added Check.That(server.Mappings).HasSize(2); + } + + [Fact] + public async Task WireMockServer_Proxy_Should_preserve_Authorization_header_in_proxied_request() + { + // Assign + string path = $"/prx_{Guid.NewGuid()}"; + var serverForProxyForwarding = WireMockServer.Start(); + serverForProxyForwarding + .Given(Request.Create().WithPath(path)) + .RespondWith(Response.Create().WithCallback(x => new ResponseMessage + { + BodyData = new BodyData + { + BodyAsString = x.Headers["Authorization"].ToString(), + DetectedBodyType = Types.BodyType.String + } + })); + + var settings = new WireMockServerSettings + { + ProxyAndRecordSettings = new ProxyAndRecordSettings + { + Url = serverForProxyForwarding.Urls[0], + SaveMapping = true, + SaveMappingToFile = false + } + }; + var server = WireMockServer.Start(settings); + + // Act + var requestMessage = new HttpRequestMessage + { + Method = HttpMethod.Post, + RequestUri = new Uri($"{server.Urls[0]}{path}"), + Content = new StringContent("stringContent", Encoding.ASCII) + }; + requestMessage.Headers.Authorization = new AuthenticationHeaderValue("BASIC", "test-A"); + var result = await new HttpClient().SendAsync(requestMessage); + + // Assert + (await result.Content.ReadAsStringAsync()).Should().Be("BASIC test-A"); + + var receivedRequest = serverForProxyForwarding.LogEntries.First().RequestMessage; + var authorizationHeader = receivedRequest.Headers["Authorization"].ToString().Should().Be("BASIC test-A"); - //var newMapping = _server.Mappings.First(m => m.Guid != guid); - //var matcher = ((Request)newMapping.RequestMatcher).GetRequestMessageMatchers().FirstOrDefault(m => m.Name == "bbb"); - //Check.That(matcher).IsNotNull(); + server.Mappings.Should().HaveCount(2); + var authorizationRequestMessageHeaderMatcher = ((Request)server.Mappings.Single(m => !m.IsAdminInterface).RequestMatcher) + .GetRequestMessageMatcher(x => x.Matchers.Any(m => m.GetPatterns().Contains("BASIC test-A"))); + authorizationRequestMessageHeaderMatcher.Should().NotBeNull(); } [Fact]