diff --git a/examples/WireMock.Net.Console.Record.NETCoreApp/Program.cs b/examples/WireMock.Net.Console.Record.NETCoreApp/Program.cs
index 7d1e16b8..8f7c3712 100644
--- a/examples/WireMock.Net.Console.Record.NETCoreApp/Program.cs
+++ b/examples/WireMock.Net.Console.Record.NETCoreApp/Program.cs
@@ -18,7 +18,8 @@ namespace WireMock.Net.Console.Record.NETCoreApp
Url = "https://www.google.com",
//X509Certificate2ThumbprintOrSubjectName = "www.yourclientcertname.com OR yourcertificatethumbprint (only if the service you're proxying to requires it)",
SaveMapping = true,
- SaveMappingToFile = false
+ SaveMappingToFile = false,
+ BlackListedHeaders = new [] { "dnt", "Content-Length" }
}
});
diff --git a/src/WireMock.Net.StandAlone/StandAloneApp.cs b/src/WireMock.Net.StandAlone/StandAloneApp.cs
index 2ce4b8e1..59924152 100644
--- a/src/WireMock.Net.StandAlone/StandAloneApp.cs
+++ b/src/WireMock.Net.StandAlone/StandAloneApp.cs
@@ -67,7 +67,8 @@ namespace WireMock.Net.StandAlone
Url = proxyURL,
SaveMapping = parser.GetBoolValue("SaveMapping"),
SaveMappingToFile = parser.GetBoolValue("SaveMappingToFile"),
- X509Certificate2ThumbprintOrSubjectName = parser.GetStringValue("X509Certificate2ThumbprintOrSubjectName")
+ X509Certificate2ThumbprintOrSubjectName = parser.GetStringValue("X509Certificate2ThumbprintOrSubjectName"),
+ BlackListedHeaders = parser.GetValues("BlackListedHeaders")
};
}
@@ -75,7 +76,7 @@ namespace WireMock.Net.StandAlone
FluentMockServer server = Start(settings);
- Console.WriteLine("WireMock.Net server listening at {0}", string.Join(" and ", server.Urls));
+ Console.WriteLine("WireMock.Net server listening at {0}", string.Join(",", server.Urls));
return server;
}
diff --git a/src/WireMock.Net/Server/FluentMockServer.Admin.cs b/src/WireMock.Net/Server/FluentMockServer.Admin.cs
index e09747a6..7202a6d8 100644
--- a/src/WireMock.Net/Server/FluentMockServer.Admin.cs
+++ b/src/WireMock.Net/Server/FluentMockServer.Admin.cs
@@ -149,7 +149,7 @@ namespace WireMock.Server
if (settings.SaveMapping)
{
- var mapping = ToMapping(requestMessage, responseMessage);
+ var mapping = ToMapping(requestMessage, responseMessage, settings.BlackListedHeaders ?? new string[] { });
_options.Mappings.Add(mapping);
if (settings.SaveMappingToFile)
@@ -161,16 +161,23 @@ namespace WireMock.Server
return responseMessage;
}
- private Mapping ToMapping(RequestMessage requestMessage, ResponseMessage responseMessage)
+ private Mapping ToMapping(RequestMessage requestMessage, ResponseMessage responseMessage, string[] blacklistedHeaders)
{
var request = Request.Create();
request.WithPath(requestMessage.Path);
request.UsingVerb(requestMessage.Method);
requestMessage.Query.Loop((key, value) => request.WithParam(key, value.ToArray()));
- requestMessage.Headers.Loop((key, value) => request.WithHeader(key, value.ToArray()));
requestMessage.Cookies.Loop((key, value) => request.WithCookie(key, value));
+ requestMessage.Headers.Loop((key, value) =>
+ {
+ if (!blacklistedHeaders.Any(b => string.Equals(key, b, StringComparison.OrdinalIgnoreCase)))
+ {
+ request.WithHeader(key, value.ToArray());
+ }
+ });
+
if (requestMessage.Body != null)
{
request.WithBody(new ExactMatcher(requestMessage.Body));
diff --git a/src/WireMock.Net/Settings/IProxyAndRecordSettings.cs b/src/WireMock.Net/Settings/IProxyAndRecordSettings.cs
index e5f0a4e0..005c63b8 100644
--- a/src/WireMock.Net/Settings/IProxyAndRecordSettings.cs
+++ b/src/WireMock.Net/Settings/IProxyAndRecordSettings.cs
@@ -1,7 +1,7 @@
namespace WireMock.Settings
{
///
- /// IRecordAndSaveSettings
+ /// IProxyAndRecordSettings
///
public interface IProxyAndRecordSettings
{
@@ -24,5 +24,10 @@
/// The clientCertificate thumbprint or subject name fragment to use. Example thumbprint : "D2DBF135A8D06ACCD0E1FAD9BFB28678DF7A9818". Example subject name: "www.google.com""
///
string X509Certificate2ThumbprintOrSubjectName { get; set; }
+
+ ///
+ /// Defines a list from headers which will excluded from the saved mappings.
+ ///
+ string[] BlackListedHeaders { get; set; }
}
}
diff --git a/src/WireMock.Net/Settings/ProxyAndRecordSettings.cs b/src/WireMock.Net/Settings/ProxyAndRecordSettings.cs
index c1f4d10a..ed1df0be 100644
--- a/src/WireMock.Net/Settings/ProxyAndRecordSettings.cs
+++ b/src/WireMock.Net/Settings/ProxyAndRecordSettings.cs
@@ -3,7 +3,7 @@
namespace WireMock.Settings
{
///
- /// RecordAndSaveSettings
+ /// ProxyAndRecordSettings
///
public class ProxyAndRecordSettings : IProxyAndRecordSettings
{
@@ -22,5 +22,9 @@ namespace WireMock.Settings
///
[PublicAPI]
public string X509Certificate2ThumbprintOrSubjectName { get; set; }
+
+ ///
+ [PublicAPI]
+ public string[] BlackListedHeaders { get; set; }
}
}
\ No newline at end of file
diff --git a/test/WireMock.Net.Tests/FluentMockServerTests.Proxy.cs b/test/WireMock.Net.Tests/FluentMockServerTests.Proxy.cs
index d3d28c77..775182cc 100644
--- a/test/WireMock.Net.Tests/FluentMockServerTests.Proxy.cs
+++ b/test/WireMock.Net.Tests/FluentMockServerTests.Proxy.cs
@@ -5,9 +5,11 @@ using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using NFluent;
+using WireMock.Matchers.Request;
using WireMock.RequestBuilders;
using WireMock.ResponseBuilders;
using WireMock.Server;
+using WireMock.Settings;
using Xunit;
namespace WireMock.Net.Tests
@@ -41,7 +43,16 @@ namespace WireMock.Net.Tests
.Given(Request.Create().WithPath("/*"))
.RespondWith(Response.Create());
- _server = FluentMockServer.Start();
+ var settings = new FluentMockServerSettings
+ {
+ ProxyAndRecordSettings = new ProxyAndRecordSettings
+ {
+ Url = _serverForProxyForwarding.Urls[0],
+ SaveMapping = true,
+ SaveMappingToFile = false
+ }
+ };
+ _server = FluentMockServer.Start(settings);
_server
.Given(Request.Create().WithPath("/*"))
.RespondWith(Response.Create().WithProxy(_serverForProxyForwarding.Urls[0]));
@@ -54,6 +65,7 @@ namespace WireMock.Net.Tests
Content = new StringContent("stringContent")
};
requestMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("text/plain");
+ requestMessage.Content.Headers.Add("bbb", "test");
await new HttpClient().SendAsync(requestMessage);
// then
@@ -61,6 +73,54 @@ namespace WireMock.Net.Tests
Check.That(receivedRequest.Body).IsEqualTo("stringContent");
Check.That(receivedRequest.Headers).ContainsKey("Content-Type");
Check.That(receivedRequest.Headers["Content-Type"]).ContainsExactly("text/plain");
+ Check.That(receivedRequest.Headers).ContainsKey("bbb");
+
+ var mapping = _server.Mappings.Last();
+ var matcher = ((Request) mapping.RequestMatcher).GetRequestMessageMatchers().FirstOrDefault(m => m.Name == "bbb");
+ Check.That(matcher).IsNotNull();
+ }
+
+ [Fact]
+ public async Task FluentMockServer_Proxy_Should_exclude_blacklisted_content_header_in_mapping()
+ {
+ // given
+ _serverForProxyForwarding = FluentMockServer.Start();
+ _serverForProxyForwarding
+ .Given(Request.Create().WithPath("/*"))
+ .RespondWith(Response.Create());
+
+ var settings = new FluentMockServerSettings
+ {
+ ProxyAndRecordSettings = new ProxyAndRecordSettings
+ {
+ Url = _serverForProxyForwarding.Urls[0],
+ SaveMapping = true,
+ SaveMappingToFile = false,
+ BlackListedHeaders = new[] { "bbb" }
+ }
+ };
+ _server = FluentMockServer.Start(settings);
+ _server
+ .Given(Request.Create().WithPath("/*"))
+ .RespondWith(Response.Create());
+
+ // when
+ var requestMessage = new HttpRequestMessage
+ {
+ Method = HttpMethod.Post,
+ RequestUri = new Uri(_server.Urls[0]),
+ Content = new StringContent("stringContent")
+ };
+ requestMessage.Content.Headers.Add("bbb", "test");
+ await new HttpClient().SendAsync(requestMessage);
+
+ // then
+ var receivedRequest = _serverForProxyForwarding.LogEntries.First().RequestMessage;
+ Check.That(receivedRequest.Headers).ContainsKey("bbb");
+
+ var mapping = _server.Mappings.Last();
+ var matcher = ((Request)mapping.RequestMatcher).GetRequestMessageMatchers().FirstOrDefault(m => m.Name == "bbb");
+ Check.That(matcher).IsNull();
}
[Fact]
diff --git a/test/WireMock.Net.Tests/ObservableLogEntriesTest.cs b/test/WireMock.Net.Tests/ObservableLogEntriesTest.cs
index d5292efe..ca5c875e 100644
--- a/test/WireMock.Net.Tests/ObservableLogEntriesTest.cs
+++ b/test/WireMock.Net.Tests/ObservableLogEntriesTest.cs
@@ -18,7 +18,7 @@ namespace WireMock.Net.Tests
private FluentMockServer _server;
[Fact]
- public async void Test()
+ public async void FluentMockServer_LogEntriesChanged()
{
// Assign
_server = FluentMockServer.Start();
@@ -41,9 +41,9 @@ namespace WireMock.Net.Tests
}
[Fact]
- public async Task ParallelTest()
+ public async Task FluentMockServer_LogEntriesChanged_Parallel()
{
- var expectedCount = 100;
+ int expectedCount = 10;
// Assign
_server = FluentMockServer.Start();
@@ -65,11 +65,11 @@ namespace WireMock.Net.Tests
var listOfTasks = new List>();
for (var i = 0; i < expectedCount; i++)
{
- Thread.Sleep(3);
- listOfTasks.Add(http.GetAsync(_server.Urls[0] + $"/foo"));
+ Thread.Sleep(100);
+ listOfTasks.Add(http.GetAsync($"{_server.Urls[0]}/foo"));
}
var responses = await Task.WhenAll(listOfTasks);
- var countResponsesWithStatusNotOk = responses.Where(r => r.StatusCode != HttpStatusCode.OK).Count();
+ var countResponsesWithStatusNotOk = responses.Count(r => r.StatusCode != HttpStatusCode.OK);
// Assert
Check.That(countResponsesWithStatusNotOk).Equals(0);
@@ -81,4 +81,4 @@ namespace WireMock.Net.Tests
_server?.Dispose();
}
}
-}
+}
\ No newline at end of file
diff --git a/test/WireMock.Net.Tests/RequestCookieTests.cs b/test/WireMock.Net.Tests/RequestCookieTests.cs
new file mode 100644
index 00000000..2b88c882
--- /dev/null
+++ b/test/WireMock.Net.Tests/RequestCookieTests.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using NFluent;
+using WireMock.Matchers.Request;
+using WireMock.RequestBuilders;
+using Xunit;
+
+namespace WireMock.Net.Tests
+{
+ public class RequestCookieTests
+ {
+ private const string ClientIp = "::1";
+
+ [Fact]
+ public void Request_WithCookie_OK()
+ {
+ // given
+ var spec = Request.Create().UsingAnyVerb().WithCookie("session", "a*");
+
+ // when
+ var request = new RequestMessage(new Uri("http://localhost/foo"), "PUT", ClientIp, null, null, null, null, new Dictionary { { "session", "abc" } });
+
+ // then
+ var requestMatchResult = new RequestMatchResult();
+ Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0);
+ }
+ }
+}
\ No newline at end of file
diff --git a/test/WireMock.Net.Tests/RequestTests.cs b/test/WireMock.Net.Tests/RequestTests.cs
index 1d4c2f51..ea7d2c7f 100644
--- a/test/WireMock.Net.Tests/RequestTests.cs
+++ b/test/WireMock.Net.Tests/RequestTests.cs
@@ -4,85 +4,14 @@ using System.Text;
using NFluent;
using Xunit;
using WireMock.RequestBuilders;
-using WireMock.Matchers;
using WireMock.Matchers.Request;
namespace WireMock.Net.Tests
{
- //[TestFixture]
- public partial class RequestTests
+ public class RequestTests
{
private const string ClientIp = "::1";
- [Fact]
- public void Should_specify_requests_matching_given_path()
- {
- // given
- var spec = Request.Create().WithPath("/foo");
-
- // when
- var request = new RequestMessage(new Uri("http://localhost/foo"), "blabla", ClientIp);
-
- // then
- var requestMatchResult = new RequestMatchResult();
- Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0);
- }
-
- [Fact]
- public void Should_specify_requests_matching_given_paths()
- {
- var requestBuilder = Request.Create().WithPath("/x1", "/x2");
-
- var request1 = new RequestMessage(new Uri("http://localhost/x1"), "blabla", ClientIp);
- var request2 = new RequestMessage(new Uri("http://localhost/x2"), "blabla", ClientIp);
-
- var requestMatchResult = new RequestMatchResult();
- Check.That(requestBuilder.GetMatchingScore(request1, requestMatchResult)).IsEqualTo(1.0);
- Check.That(requestBuilder.GetMatchingScore(request2, requestMatchResult)).IsEqualTo(1.0);
- }
-
- [Fact]
- public void Should_specify_requests_matching_given_pathFuncs()
- {
- // given
- var spec = Request.Create().WithPath(url => url.EndsWith("/foo"));
-
- // when
- var request = new RequestMessage(new Uri("http://localhost/foo"), "blabla", ClientIp);
-
- // then
- var requestMatchResult = new RequestMatchResult();
- Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0);
- }
-
- [Fact]
- public void Should_specify_requests_matching_given_path_prefix()
- {
- // given
- var spec = Request.Create().WithPath(new RegexMatcher("^/foo"));
-
- // when
- var request = new RequestMessage(new Uri("http://localhost/foo/bar"), "blabla", ClientIp);
-
- // then
- var requestMatchResult = new RequestMatchResult();
- Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0);
- }
-
- [Fact]
- public void Should_exclude_requests_not_matching_given_path()
- {
- // given
- var spec = Request.Create().WithPath("/foo");
-
- // when
- var request = new RequestMessage(new Uri("http://localhost/bar"), "blabla", ClientIp);
-
- // then
- var requestMatchResult = new RequestMatchResult();
- Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsNotEqualTo(1.0);
- }
-
[Fact]
public void Should_exclude_requests_matching_given_http_method_but_not_url()
{
@@ -97,22 +26,6 @@ namespace WireMock.Net.Tests
Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsNotEqualTo(1.0);
}
- [Fact]
- public void Should_specify_requests_matching_given_path_and_headers()
- {
- // given
- var spec = Request.Create().WithPath("/foo").UsingAnyVerb().WithHeader("X-toto", "tata");
-
- // when
- string bodyAsString = "whatever";
- byte[] body = Encoding.UTF8.GetBytes(bodyAsString);
- var request = new RequestMessage(new Uri("http://localhost/foo"), "PUT", ClientIp, body, bodyAsString, Encoding.UTF8, new Dictionary { { "X-toto", new[] { "tata" } } });
-
- // then
- var requestMatchResult = new RequestMatchResult();
- Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0);
- }
-
[Fact]
public void Should_exclude_requests_not_matching_given_headers()
{
@@ -161,19 +74,7 @@ namespace WireMock.Net.Tests
Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0);
}
- [Fact]
- public void Should_specify_requests_matching_given_cookies()
- {
- // given
- var spec = Request.Create().UsingAnyVerb().WithCookie("session", "a*");
-
- // when
- var request = new RequestMessage(new Uri("http://localhost/foo"), "PUT", ClientIp, null, null, null, null, new Dictionary { { "session", "abc" } });
-
- // then
- var requestMatchResult = new RequestMatchResult();
- Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0);
- }
+
[Fact]
public void Should_specify_requests_matching_given_body()
@@ -191,192 +92,7 @@ namespace WireMock.Net.Tests
Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0);
}
- [Fact]
- public void Should_specify_requests_matching_given_body_using_ExactMatcher_true()
- {
- // given
- var requestBuilder = Request.Create().UsingAnyVerb().WithBody(new ExactMatcher("cat"));
-
- // when
- string bodyAsString = "cat";
- byte[] body = Encoding.UTF8.GetBytes(bodyAsString);
- var request = new RequestMessage(new Uri("http://localhost/foo"), "POST", ClientIp, body, bodyAsString, Encoding.UTF8);
-
- // then
- var requestMatchResult = new RequestMatchResult();
- Check.That(requestBuilder.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0);
- }
-
- [Fact]
- public void Should_specify_requests_matching_given_body_using_ExactMatcher_multiplePatterns()
- {
- // given
- var requestBuilder = Request.Create().UsingAnyVerb().WithBody(new ExactMatcher("cat", "dog"));
-
- // when
- string bodyAsString = "cat";
- byte[] body = Encoding.UTF8.GetBytes(bodyAsString);
- var request = new RequestMessage(new Uri("http://localhost/foo"), "POST", ClientIp, body, bodyAsString, Encoding.UTF8);
-
- // then
- var requestMatchResult = new RequestMatchResult();
- Check.That(requestBuilder.GetMatchingScore(request, requestMatchResult)).IsEqualTo(0.5);
- }
-
- [Fact]
- public void Should_specify_requests_matching_given_body_using_ExactMatcher_false()
- {
- // given
- var requestBuilder = Request.Create().UsingAnyVerb().WithBody(new ExactMatcher("cat"));
-
- // when
- string bodyAsString = "caR";
- byte[] body = Encoding.UTF8.GetBytes(bodyAsString);
- var request = new RequestMessage(new Uri("http://localhost/foo"), "POST", ClientIp, body, bodyAsString, Encoding.UTF8);
-
- // then
- var requestMatchResult = new RequestMatchResult();
- Check.That(requestBuilder.GetMatchingScore(request, requestMatchResult)).IsStrictlyLessThan(1.0);
- }
-
- [Fact]
- public void Should_specify_requests_matching_given_body_using_SimMetricsMatcher1()
- {
- // given
- var requestBuilder = Request.Create().UsingAnyVerb().WithBody(new SimMetricsMatcher("The cat walks in the street."));
-
- // when
- string bodyAsString = "The car drives in the street.";
- byte[] body = Encoding.UTF8.GetBytes(bodyAsString);
- var request = new RequestMessage(new Uri("http://localhost/foo"), "POST", ClientIp, body, bodyAsString, Encoding.UTF8);
-
- // then
- var requestMatchResult = new RequestMatchResult();
- Check.That(requestBuilder.GetMatchingScore(request, requestMatchResult)).IsStrictlyLessThan(1.0).And.IsStrictlyGreaterThan(0.5);
- }
-
- [Fact]
- public void Should_specify_requests_matching_given_body_using_SimMetricsMatcher2()
- {
- // given
- var requestBuilder = Request.Create().UsingAnyVerb().WithBody(new SimMetricsMatcher("The cat walks in the street."));
-
- // when
- string bodyAsString = "Hello";
- byte[] body = Encoding.UTF8.GetBytes(bodyAsString);
- var request = new RequestMessage(new Uri("http://localhost/foo"), "POST", ClientIp, body, bodyAsString, Encoding.UTF8);
-
- // then
- var requestMatchResult = new RequestMatchResult();
- Check.That(requestBuilder.GetMatchingScore(request, requestMatchResult)).IsStrictlyLessThan(0.1).And.IsStrictlyGreaterThan(0.05);
- }
-
- [Fact]
- public void Should_specify_requests_matching_given_body_using_WildcardMatcher()
- {
- // given
- var spec = Request.Create().WithPath("/foo").UsingAnyVerb().WithBody(new WildcardMatcher("H*o*"));
-
- // when
- string bodyAsString = "Hello world!";
- byte[] body = Encoding.UTF8.GetBytes(bodyAsString);
- var request = new RequestMessage(new Uri("http://localhost/foo"), "PUT", ClientIp, body, bodyAsString, Encoding.UTF8, new Dictionary { { "X-toto", new[] { "tatata" } } });
-
- // then
- var requestMatchResult = new RequestMatchResult();
- Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0);
- }
-
- [Fact]
- public void Should_specify_requests_matching_given_body_using_RegexMatcher()
- {
- // given
- var spec = Request.Create().UsingAnyVerb().WithBody(new RegexMatcher("H.*o"));
-
- // when
- string bodyAsString = "Hello world!";
- byte[] body = Encoding.UTF8.GetBytes(bodyAsString);
- var request = new RequestMessage(new Uri("http://localhost/foo"), "PUT", ClientIp, body, bodyAsString, Encoding.UTF8);
-
- // then
- var requestMatchResult = new RequestMatchResult();
- Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0);
- }
-
- [Fact]
- public void Should_specify_requests_matching_given_body_using_XPathMatcher_true()
- {
- // given
- var spec = Request.Create().UsingAnyVerb().WithBody(new XPathMatcher("/todo-list[count(todo-item) = 3]"));
-
- // when
- string xmlBodyAsString = @"
-
- abc
- def
- xyz
- ";
- byte[] body = Encoding.UTF8.GetBytes(xmlBodyAsString);
- var request = new RequestMessage(new Uri("http://localhost/foo"), "PUT", ClientIp, body, xmlBodyAsString, Encoding.UTF8);
-
- // then
- var requestMatchResult = new RequestMatchResult();
- Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0);
- }
-
- [Fact]
- public void Should_specify_requests_matching_given_body_using_XPathMatcher_false()
- {
- // given
- var spec = Request.Create().UsingAnyVerb().WithBody(new XPathMatcher("/todo-list[count(todo-item) = 99]"));
-
- // when
- string xmlBodyAsString = @"
-
- abc
- def
- xyz
- ";
- byte[] body = Encoding.UTF8.GetBytes(xmlBodyAsString);
- var request = new RequestMessage(new Uri("http://localhost/foo"), "PUT", ClientIp, body, xmlBodyAsString, Encoding.UTF8);
-
- // then
- var requestMatchResult = new RequestMatchResult();
- Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsNotEqualTo(1.0);
- }
-
- [Fact]
- public void Should_specify_requests_matching_given_body_using_JsonPathMatcher_true()
- {
- // given
- var spec = Request.Create().UsingAnyVerb().WithBody(new JsonPathMatcher("$.things[?(@.name == 'RequiredThing')]"));
-
- // when
- string bodyAsString = "{ \"things\": [ { \"name\": \"RequiredThing\" }, { \"name\": \"Wiremock\" } ] }";
- byte[] body = Encoding.UTF8.GetBytes(bodyAsString);
- var request = new RequestMessage(new Uri("http://localhost/foo"), "PUT", ClientIp, body, bodyAsString, Encoding.UTF8);
-
- // then
- var requestMatchResult = new RequestMatchResult();
- Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0);
- }
-
- [Fact]
- public void Should_specify_requests_matching_given_body_using_JsonPathMatcher_false()
- {
- // given
- var spec = Request.Create().UsingAnyVerb().WithBody(new JsonPathMatcher("$.things[?(@.name == 'RequiredThing')]"));
-
- // when
- string bodyAsString = "{ \"things\": { \"name\": \"Wiremock\" } }";
- byte[] body = Encoding.UTF8.GetBytes(bodyAsString);
- var request = new RequestMessage(new Uri("http://localhost/foo"), "PUT", ClientIp, body, bodyAsString, Encoding.UTF8);
-
- // then
- var requestMatchResult = new RequestMatchResult();
- Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsNotEqualTo(1.0);
- }
-
+
[Fact]
public void Should_exclude_requests_not_matching_given_body()
{
diff --git a/test/WireMock.Net.Tests/RequestWithBodyTests.cs b/test/WireMock.Net.Tests/RequestWithBodyTests.cs
new file mode 100644
index 00000000..6942e6b5
--- /dev/null
+++ b/test/WireMock.Net.Tests/RequestWithBodyTests.cs
@@ -0,0 +1,202 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using NFluent;
+using WireMock.Matchers;
+using WireMock.Matchers.Request;
+using WireMock.RequestBuilders;
+using Xunit;
+
+namespace WireMock.Net.Tests
+{
+ public class RequestWithBodyTests
+ {
+ private const string ClientIp = "::1";
+
+ [Fact]
+ public void Request_WithBodyExactMatcher()
+ {
+ // given
+ var requestBuilder = Request.Create().UsingAnyVerb().WithBody(new ExactMatcher("cat"));
+
+ // when
+ string bodyAsString = "cat";
+ byte[] body = Encoding.UTF8.GetBytes(bodyAsString);
+ var request = new RequestMessage(new Uri("http://localhost/foo"), "POST", ClientIp, body, bodyAsString, Encoding.UTF8);
+
+ // then
+ var requestMatchResult = new RequestMatchResult();
+ Check.That(requestBuilder.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0);
+ }
+
+ [Fact]
+ public void Request_WithBodyExactMatcher_multiplePatterns()
+ {
+ // given
+ var requestBuilder = Request.Create().UsingAnyVerb().WithBody(new ExactMatcher("cat", "dog"));
+
+ // when
+ string bodyAsString = "cat";
+ byte[] body = Encoding.UTF8.GetBytes(bodyAsString);
+ var request = new RequestMessage(new Uri("http://localhost/foo"), "POST", ClientIp, body, bodyAsString, Encoding.UTF8);
+
+ // then
+ var requestMatchResult = new RequestMatchResult();
+ Check.That(requestBuilder.GetMatchingScore(request, requestMatchResult)).IsEqualTo(0.5);
+ }
+
+ [Fact]
+ public void Request_WithBodyExactMatcher_false()
+ {
+ // given
+ var requestBuilder = Request.Create().UsingAnyVerb().WithBody(new ExactMatcher("cat"));
+
+ // when
+ string bodyAsString = "caR";
+ byte[] body = Encoding.UTF8.GetBytes(bodyAsString);
+ var request = new RequestMessage(new Uri("http://localhost/foo"), "POST", ClientIp, body, bodyAsString, Encoding.UTF8);
+
+ // then
+ var requestMatchResult = new RequestMatchResult();
+ Check.That(requestBuilder.GetMatchingScore(request, requestMatchResult)).IsStrictlyLessThan(1.0);
+ }
+
+ [Fact]
+ public void Request_WithBodySimMetricsMatcher1()
+ {
+ // given
+ var requestBuilder = Request.Create().UsingAnyVerb().WithBody(new SimMetricsMatcher("The cat walks in the street."));
+
+ // when
+ string bodyAsString = "The car drives in the street.";
+ byte[] body = Encoding.UTF8.GetBytes(bodyAsString);
+ var request = new RequestMessage(new Uri("http://localhost/foo"), "POST", ClientIp, body, bodyAsString, Encoding.UTF8);
+
+ // then
+ var requestMatchResult = new RequestMatchResult();
+ Check.That(requestBuilder.GetMatchingScore(request, requestMatchResult)).IsStrictlyLessThan(1.0).And.IsStrictlyGreaterThan(0.5);
+ }
+
+ [Fact]
+ public void Request_WithBodySimMetricsMatcher2()
+ {
+ // given
+ var requestBuilder = Request.Create().UsingAnyVerb().WithBody(new SimMetricsMatcher("The cat walks in the street."));
+
+ // when
+ string bodyAsString = "Hello";
+ byte[] body = Encoding.UTF8.GetBytes(bodyAsString);
+ var request = new RequestMessage(new Uri("http://localhost/foo"), "POST", ClientIp, body, bodyAsString, Encoding.UTF8);
+
+ // then
+ var requestMatchResult = new RequestMatchResult();
+ Check.That(requestBuilder.GetMatchingScore(request, requestMatchResult)).IsStrictlyLessThan(0.1).And.IsStrictlyGreaterThan(0.05);
+ }
+
+ [Fact]
+ public void Request_WithBodyWildcardMatcher()
+ {
+ // given
+ var spec = Request.Create().WithPath("/foo").UsingAnyVerb().WithBody(new WildcardMatcher("H*o*"));
+
+ // when
+ string bodyAsString = "Hello world!";
+ byte[] body = Encoding.UTF8.GetBytes(bodyAsString);
+ var request = new RequestMessage(new Uri("http://localhost/foo"), "PUT", ClientIp, body, bodyAsString, Encoding.UTF8, new Dictionary { { "X-toto", new[] { "tatata" } } });
+
+ // then
+ var requestMatchResult = new RequestMatchResult();
+ Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0);
+ }
+
+ [Fact]
+ public void Request_WithBodyRegexMatcher()
+ {
+ // given
+ var spec = Request.Create().UsingAnyVerb().WithBody(new RegexMatcher("H.*o"));
+
+ // when
+ string bodyAsString = "Hello world!";
+ byte[] body = Encoding.UTF8.GetBytes(bodyAsString);
+ var request = new RequestMessage(new Uri("http://localhost/foo"), "PUT", ClientIp, body, bodyAsString, Encoding.UTF8);
+
+ // then
+ var requestMatchResult = new RequestMatchResult();
+ Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0);
+ }
+
+ [Fact]
+ public void Request_WithBodyXPathMatcher_true()
+ {
+ // given
+ var spec = Request.Create().UsingAnyVerb().WithBody(new XPathMatcher("/todo-list[count(todo-item) = 3]"));
+
+ // when
+ string xmlBodyAsString = @"
+
+ abc
+ def
+ xyz
+ ";
+ byte[] body = Encoding.UTF8.GetBytes(xmlBodyAsString);
+ var request = new RequestMessage(new Uri("http://localhost/foo"), "PUT", ClientIp, body, xmlBodyAsString, Encoding.UTF8);
+
+ // then
+ var requestMatchResult = new RequestMatchResult();
+ Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0);
+ }
+
+ [Fact]
+ public void Request_WithBodyXPathMatcher_false()
+ {
+ // given
+ var spec = Request.Create().UsingAnyVerb().WithBody(new XPathMatcher("/todo-list[count(todo-item) = 99]"));
+
+ // when
+ string xmlBodyAsString = @"
+
+ abc
+ def
+ xyz
+ ";
+ byte[] body = Encoding.UTF8.GetBytes(xmlBodyAsString);
+ var request = new RequestMessage(new Uri("http://localhost/foo"), "PUT", ClientIp, body, xmlBodyAsString, Encoding.UTF8);
+
+ // then
+ var requestMatchResult = new RequestMatchResult();
+ Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsNotEqualTo(1.0);
+ }
+
+ [Fact]
+ public void Request_WithBodyJsonPathMatcher_true()
+ {
+ // given
+ var spec = Request.Create().UsingAnyVerb().WithBody(new JsonPathMatcher("$.things[?(@.name == 'RequiredThing')]"));
+
+ // when
+ string bodyAsString = "{ \"things\": [ { \"name\": \"RequiredThing\" }, { \"name\": \"Wiremock\" } ] }";
+ byte[] body = Encoding.UTF8.GetBytes(bodyAsString);
+ var request = new RequestMessage(new Uri("http://localhost/foo"), "PUT", ClientIp, body, bodyAsString, Encoding.UTF8);
+
+ // then
+ var requestMatchResult = new RequestMatchResult();
+ Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0);
+ }
+
+ [Fact]
+ public void Request_WithBodyJsonPathMatcher_false()
+ {
+ // given
+ var spec = Request.Create().UsingAnyVerb().WithBody(new JsonPathMatcher("$.things[?(@.name == 'RequiredThing')]"));
+
+ // when
+ string bodyAsString = "{ \"things\": { \"name\": \"Wiremock\" } }";
+ byte[] body = Encoding.UTF8.GetBytes(bodyAsString);
+ var request = new RequestMessage(new Uri("http://localhost/foo"), "PUT", ClientIp, body, bodyAsString, Encoding.UTF8);
+
+ // then
+ var requestMatchResult = new RequestMatchResult();
+ Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsNotEqualTo(1.0);
+ }
+ }
+}
\ No newline at end of file
diff --git a/test/WireMock.Net.Tests/RequestTests.ClientIP.cs b/test/WireMock.Net.Tests/RequestWithClientIPTests.cs
similarity index 91%
rename from test/WireMock.Net.Tests/RequestTests.ClientIP.cs
rename to test/WireMock.Net.Tests/RequestWithClientIPTests.cs
index 397311fb..3381491f 100644
--- a/test/WireMock.Net.Tests/RequestTests.ClientIP.cs
+++ b/test/WireMock.Net.Tests/RequestWithClientIPTests.cs
@@ -1,40 +1,39 @@
-using System;
-using NFluent;
-using WireMock.Matchers.Request;
-using WireMock.RequestBuilders;
-using Xunit;
-
-namespace WireMock.Net.Tests
-{
- //[TestFixture]
- public partial class RequestTests
- {
- [Fact]
- public void Request_WithClientIP_Match_Ok()
- {
- // given
- var spec = Request.Create().WithClientIP("127.0.0.2", "1.1.1.1");
-
- // when
- var request = new RequestMessage(new Uri("http://localhost"), "GET", "127.0.0.2");
-
- // then
- var requestMatchResult = new RequestMatchResult();
- Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0);
- }
-
- [Fact]
- public void Request_WithClientIP_Match_Fail()
- {
- // given
- var spec = Request.Create().WithClientIP("127.0.0.2");
-
- // when
- var request = new RequestMessage(new Uri("http://localhost"), "GET", "192.1.1.1");
-
- // then
- var requestMatchResult = new RequestMatchResult();
- Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(0.0);
- }
- }
+using System;
+using NFluent;
+using WireMock.Matchers.Request;
+using WireMock.RequestBuilders;
+using Xunit;
+
+namespace WireMock.Net.Tests
+{
+ public class RequestWithClientIPTests
+ {
+ [Fact]
+ public void Request_WithClientIP_Match_Ok()
+ {
+ // given
+ var spec = Request.Create().WithClientIP("127.0.0.2", "1.1.1.1");
+
+ // when
+ var request = new RequestMessage(new Uri("http://localhost"), "GET", "127.0.0.2");
+
+ // then
+ var requestMatchResult = new RequestMatchResult();
+ Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0);
+ }
+
+ [Fact]
+ public void Request_WithClientIP_Match_Fail()
+ {
+ // given
+ var spec = Request.Create().WithClientIP("127.0.0.2");
+
+ // when
+ var request = new RequestMessage(new Uri("http://localhost"), "GET", "192.1.1.1");
+
+ // then
+ var requestMatchResult = new RequestMatchResult();
+ Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(0.0);
+ }
+ }
}
\ No newline at end of file
diff --git a/test/WireMock.Net.Tests/RequestTests.PathAndMethod.cs b/test/WireMock.Net.Tests/RequestWithPathTests.cs
similarity index 53%
rename from test/WireMock.Net.Tests/RequestTests.PathAndMethod.cs
rename to test/WireMock.Net.Tests/RequestWithPathTests.cs
index 5b4e8170..6c89b09f 100644
--- a/test/WireMock.Net.Tests/RequestTests.PathAndMethod.cs
+++ b/test/WireMock.Net.Tests/RequestWithPathTests.cs
@@ -1,15 +1,103 @@
using System;
+using System.Collections.Generic;
using System.Text;
using NFluent;
+using WireMock.Matchers;
using Xunit;
using WireMock.RequestBuilders;
using WireMock.Matchers.Request;
namespace WireMock.Net.Tests
{
- //[TestFixture]
- public partial class RequestTests
+ public class RequestWithPathTests
{
+ private const string ClientIp = "::1";
+
+ [Fact]
+ public void Request_WithPath_WithHeader_Match()
+ {
+ // given
+ var spec = Request.Create().WithPath("/foo").UsingAnyVerb().WithHeader("X-toto", "tata");
+
+ // when
+ string bodyAsString = "whatever";
+ byte[] body = Encoding.UTF8.GetBytes(bodyAsString);
+ var request = new RequestMessage(new Uri("http://localhost/foo"), "PUT", ClientIp, body, bodyAsString, Encoding.UTF8, new Dictionary { { "X-toto", new[] { "tata" } } });
+
+ // then
+ var requestMatchResult = new RequestMatchResult();
+ Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0);
+ }
+
+ [Fact]
+ public void Request_WithPath()
+ {
+ // given
+ var spec = Request.Create().WithPath("/foo");
+
+ // when
+ var request = new RequestMessage(new Uri("http://localhost/foo"), "blabla", ClientIp);
+
+ // then
+ var requestMatchResult = new RequestMatchResult();
+ Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0);
+ }
+
+ [Fact]
+ public void Request_WithPaths()
+ {
+ var requestBuilder = Request.Create().WithPath("/x1", "/x2");
+
+ var request1 = new RequestMessage(new Uri("http://localhost/x1"), "blabla", ClientIp);
+ var request2 = new RequestMessage(new Uri("http://localhost/x2"), "blabla", ClientIp);
+
+ var requestMatchResult = new RequestMatchResult();
+ Check.That(requestBuilder.GetMatchingScore(request1, requestMatchResult)).IsEqualTo(1.0);
+ Check.That(requestBuilder.GetMatchingScore(request2, requestMatchResult)).IsEqualTo(1.0);
+ }
+
+ [Fact]
+ public void Request_WithPathFunc()
+ {
+ // given
+ var spec = Request.Create().WithPath(url => url.EndsWith("/foo"));
+
+ // when
+ var request = new RequestMessage(new Uri("http://localhost/foo"), "blabla", ClientIp);
+
+ // then
+ var requestMatchResult = new RequestMatchResult();
+ Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0);
+ }
+
+ [Fact]
+ public void Request_WithPathRegexMatcher()
+ {
+ // given
+ var spec = Request.Create().WithPath(new RegexMatcher("^/foo"));
+
+ // when
+ var request = new RequestMessage(new Uri("http://localhost/foo/bar"), "blabla", ClientIp);
+
+ // then
+ var requestMatchResult = new RequestMatchResult();
+ Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsEqualTo(1.0);
+ }
+
+ [Fact]
+ public void Request_WithPathRegex_false()
+ {
+ // given
+ var spec = Request.Create().WithPath("/foo");
+
+ // when
+ var request = new RequestMessage(new Uri("http://localhost/bar"), "blabla", ClientIp);
+
+ // then
+ var requestMatchResult = new RequestMatchResult();
+ Check.That(spec.GetMatchingScore(request, requestMatchResult)).IsNotEqualTo(1.0);
+ }
+
[Fact]
public void Should_specify_requests_matching_given_path_and_method_delete()
{
diff --git a/test/WireMock.Net.Tests/RequestTests.Url.cs b/test/WireMock.Net.Tests/RequestWithUrlTests.cs
similarity index 84%
rename from test/WireMock.Net.Tests/RequestTests.Url.cs
rename to test/WireMock.Net.Tests/RequestWithUrlTests.cs
index ccea4f00..054fe3c3 100644
--- a/test/WireMock.Net.Tests/RequestTests.Url.cs
+++ b/test/WireMock.Net.Tests/RequestWithUrlTests.cs
@@ -6,10 +6,12 @@ using Xunit;
namespace WireMock.Net.Tests
{
- public partial class RequestTests
+ public class RequestWithUrlTests
{
+ private const string ClientIp = "::1";
+
[Fact]
- public void Should_specify_requests_matching_given_url_wildcard()
+ public void Request_WithUrl()
{
// given
var spec = Request.Create().WithUrl("*/foo");
@@ -23,7 +25,7 @@ namespace WireMock.Net.Tests
}
[Fact]
- public void Should_specify_requests_matching_given_url_exact()
+ public void Request_WithUrlExact()
{
// given
var spec = Request.Create().WithUrl("http://localhost/foo");
diff --git a/test/WireMock.Net.Tests/ResponseTests.Handlebars.cs b/test/WireMock.Net.Tests/ResponseWithBodyHandlebarsTests.cs
similarity index 97%
rename from test/WireMock.Net.Tests/ResponseTests.Handlebars.cs
rename to test/WireMock.Net.Tests/ResponseWithBodyHandlebarsTests.cs
index daf793b8..0e987c5c 100644
--- a/test/WireMock.Net.Tests/ResponseTests.Handlebars.cs
+++ b/test/WireMock.Net.Tests/ResponseWithBodyHandlebarsTests.cs
@@ -8,8 +8,10 @@ using Xunit;
namespace WireMock.Net.Tests
{
- public partial class ResponseTests
+ public class ResponseWithBodyHandlebarsTests
{
+ private const string ClientIp = "::1";
+
[Fact]
public async Task Response_ProvideResponse_Handlebars_UrlPathVerb()
{
diff --git a/test/WireMock.Net.Tests/ResponseTests.cs b/test/WireMock.Net.Tests/ResponseWithBodyTests.cs
similarity index 98%
rename from test/WireMock.Net.Tests/ResponseTests.cs
rename to test/WireMock.Net.Tests/ResponseWithBodyTests.cs
index acf05d75..78a3d95f 100644
--- a/test/WireMock.Net.Tests/ResponseTests.cs
+++ b/test/WireMock.Net.Tests/ResponseWithBodyTests.cs
@@ -7,7 +7,7 @@ using Xunit;
namespace WireMock.Net.Tests
{
- public partial class ResponseTests
+ public class ResponseWithBodyTests
{
private const string ClientIp = "::1";