From ec2d105db2548d12f2bcf4c1f4749084063abded Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Sat, 4 Feb 2017 17:30:16 +0100 Subject: [PATCH] Partial matching --- .../Program.cs | 34 ++++--- .../Admin/Requests/LogEntryModel.cs | 8 ++ .../Admin/Requests/LogRequestMatchModel.cs | 40 ++++++++ src/WireMock.Net/Logging/LogEntry.cs | 9 ++ src/WireMock.Net/Mapping.cs | 12 ++- .../Matchers/Request/IRequestMatcher.cs | 3 +- .../Matchers/Request/RequestMatchResult.cs | 31 ++++++- .../Request/RequestMessageBodyMatcher.cs | 20 +++- .../Request/RequestMessageCompositeMatcher.cs | 26 +++++- .../Request/RequestMessageCookieMatcher.cs | 21 ++++- .../Request/RequestMessageHeaderMatcher.cs | 19 +++- .../Request/RequestMessageMethodMatcher.cs | 14 ++- .../Request/RequestMessageParamMatcher.cs | 16 +++- .../Request/RequestMessagePathMatcher.cs | 16 +++- .../Request/RequestMessageUrlMatcher.cs | 16 +++- .../Server/FluentMockServer.Admin.cs | 5 + src/WireMock.Net/Server/FluentMockServer.cs | 36 +++++-- .../FluentMockServerTests.cs | 7 +- test/WireMock.Net.Tests/RequestTests.cs | 93 ++++++++++++------- 19 files changed, 343 insertions(+), 83 deletions(-) create mode 100644 src/WireMock.Net/Admin/Requests/LogRequestMatchModel.cs diff --git a/examples/WireMock.Net.ConsoleApplication/Program.cs b/examples/WireMock.Net.ConsoleApplication/Program.cs index 2d84e24c..af0d2d75 100644 --- a/examples/WireMock.Net.ConsoleApplication/Program.cs +++ b/examples/WireMock.Net.ConsoleApplication/Program.cs @@ -18,6 +18,8 @@ namespace WireMock.Net.ConsoleApplication var server = FluentMockServer.StartWithAdminInterface(url1, url2, url3); Console.WriteLine("FluentMockServer listening at {0}", string.Join(" and ", server.Urls)); + server.AllowPartialMapping(); + server .Given(Request.Create().WithPath(p => p.Contains("x")).UsingGet()) .AtPriority(4) @@ -26,20 +28,6 @@ namespace WireMock.Net.ConsoleApplication .WithHeader("Content-Type", "application/json") .WithBody(@"{ ""result"": ""Contains x with FUNC 200""}")); - // http://localhost:8080/gffgfgf/sddsds?start=1000&stop=1&stop=2 - server - .Given(Request.Create().WithPath("/*").UsingGet().WithParam("start")) - .WithGuid(Guid.Parse("90356dba-b36c-469a-a17e-669cd84f1f05")) - .RespondWith(Response.Create() - .WithStatusCode(200) - .WithHeader("Content-Type", "application/json") - .WithHeader("Transformed-Postman-Token", "token is {{request.headers.Postman-Token}}") - .WithBody(@"{""msg"": ""Hello world, {{request.path}}, bykey={{request.query.start}}, bykey={{request.query.stop}}, byidx0={{request.query.stop.[0]}}, byidx1={{request.query.stop.[1]}}"" }") - .WithTransformer() - .WithDelay(1000) - .WithDelay(TimeSpan.FromMilliseconds(100)) - ); - server .Given(Request.Create().WithPath("/data").UsingPost().WithBody(b => b.Contains("e"))) .RespondWith(Response.Create() @@ -80,6 +68,24 @@ namespace WireMock.Net.ConsoleApplication .RespondWith(Response.Create().WithDelay(TimeSpan.FromSeconds(1)) .WithStatusCode(200)); + server + .Given(Request.Create().WithPath("/partial").UsingGet().WithHeader("p", "p")) + .RespondWith(Response.Create().WithStatusCode(200).WithBody("partial = 200")); + + // http://localhost:8080/any/any?start=1000&stop=1&stop=2 + server + .Given(Request.Create().WithPath("/*").UsingGet()) + .WithGuid(Guid.Parse("90356dba-b36c-469a-a17e-669cd84f1f05")) + .RespondWith(Response.Create() + .WithStatusCode(200) + .WithHeader("Content-Type", "application/json") + .WithHeader("Transformed-Postman-Token", "token is {{request.headers.Postman-Token}}") + .WithBody(@"{""msg"": ""Hello world CATCH-ALL on /*, {{request.path}}, bykey={{request.query.start}}, bykey={{request.query.stop}}, byidx0={{request.query.stop.[0]}}, byidx1={{request.query.stop.[1]}}"" }") + .WithTransformer() + .WithDelay(1000) + .WithDelay(TimeSpan.FromMilliseconds(100)) + ); + Console.WriteLine("Press any key to stop the server"); Console.ReadKey(); diff --git a/src/WireMock.Net/Admin/Requests/LogEntryModel.cs b/src/WireMock.Net/Admin/Requests/LogEntryModel.cs index 9f1f71ca..e1a58808 100644 --- a/src/WireMock.Net/Admin/Requests/LogEntryModel.cs +++ b/src/WireMock.Net/Admin/Requests/LogEntryModel.cs @@ -30,5 +30,13 @@ namespace WireMock.Admin.Requests /// The response. /// public LogResponseModel Response { get; set; } + + /// + /// Gets or sets the request match result. + /// + /// + /// The request match result. + /// + public LogRequestMatchModel RequestMatchResult { get; set; } } } \ No newline at end of file diff --git a/src/WireMock.Net/Admin/Requests/LogRequestMatchModel.cs b/src/WireMock.Net/Admin/Requests/LogRequestMatchModel.cs new file mode 100644 index 00000000..2540dc31 --- /dev/null +++ b/src/WireMock.Net/Admin/Requests/LogRequestMatchModel.cs @@ -0,0 +1,40 @@ +namespace WireMock.Admin.Requests +{ + /// + /// LogRequestMatchModel + /// + public class LogRequestMatchModel + { + /// + /// Gets or sets the number of matches. + /// + /// + /// The number of matches. + /// + public int Matched { get; set; } + + /// + /// Gets or sets the total number of matches. + /// + /// + /// The total number of matches. + /// + public int Total { get; set; } + + /// + /// Gets or sets a value indicating whether this instance is perfect match. + /// + /// + /// true if this instance is perfect match; otherwise, false. + /// + public bool IsPerfectMatch => Matched == Total; + + /// + /// Gets the match percentage. + /// + /// + /// The match percentage. + /// + public double MatchPercentage => Total == 0 ? 100 : 100.0 * Matched / Total; + } +} \ No newline at end of file diff --git a/src/WireMock.Net/Logging/LogEntry.cs b/src/WireMock.Net/Logging/LogEntry.cs index 43357b47..a2f0c8cd 100644 --- a/src/WireMock.Net/Logging/LogEntry.cs +++ b/src/WireMock.Net/Logging/LogEntry.cs @@ -1,4 +1,5 @@ using System; +using WireMock.Matchers.Request; namespace WireMock.Logging { @@ -30,5 +31,13 @@ namespace WireMock.Logging /// The response message. /// public ResponseMessage ResponseMessage { get; set; } + + /// + /// Gets or sets the request match result. + /// + /// + /// The request match result. + /// + public RequestMatchResult RequestMatchResult { get; set; } } } \ No newline at end of file diff --git a/src/WireMock.Net/Mapping.cs b/src/WireMock.Net/Mapping.cs index 319f3c0b..0498bb7b 100644 --- a/src/WireMock.Net/Mapping.cs +++ b/src/WireMock.Net/Mapping.cs @@ -64,12 +64,14 @@ namespace WireMock /// Determines whether the RequestMessage is handled. /// /// The request message. - /// - /// true if RequestMessage is handled; otherwise, false. - /// - public bool IsRequestHandled(RequestMessage requestMessage) + /// The . + public RequestMatchResult IsRequestHandled(RequestMessage requestMessage) { - return RequestMatcher.IsMatch(requestMessage); + var result = new RequestMatchResult(); + + RequestMatcher.IsMatch(requestMessage, result); + + return result; } } } \ No newline at end of file diff --git a/src/WireMock.Net/Matchers/Request/IRequestMatcher.cs b/src/WireMock.Net/Matchers/Request/IRequestMatcher.cs index 6e1d632e..7d892f2a 100644 --- a/src/WireMock.Net/Matchers/Request/IRequestMatcher.cs +++ b/src/WireMock.Net/Matchers/Request/IRequestMatcher.cs @@ -11,9 +11,10 @@ namespace WireMock.Matchers.Request /// Determines whether the specified RequestMessage is match. /// /// The RequestMessage. + /// The RequestMatchResult. /// /// true if the specified RequestMessage is match; otherwise, false. /// - bool IsMatch([NotNull] RequestMessage requestMessage); + bool IsMatch([NotNull] RequestMessage requestMessage, [NotNull] RequestMatchResult requestMatchResult); } } \ No newline at end of file diff --git a/src/WireMock.Net/Matchers/Request/RequestMatchResult.cs b/src/WireMock.Net/Matchers/Request/RequestMatchResult.cs index 37c58bbd..2131c31b 100644 --- a/src/WireMock.Net/Matchers/Request/RequestMatchResult.cs +++ b/src/WireMock.Net/Matchers/Request/RequestMatchResult.cs @@ -1,9 +1,11 @@ -namespace WireMock.Matchers.Request +using System; + +namespace WireMock.Matchers.Request { /// /// RequestMatchResult /// - public class RequestMatchResult + public class RequestMatchResult : IComparable { /// /// Gets or sets the number of matches. @@ -27,6 +29,29 @@ /// /// true if this instance is perfect match; otherwise, false. /// - public bool IsPerfectMatch { get; set; } + public bool IsPerfectMatch => Matched == Total; + + /// + /// Gets the match percentage. + /// + /// + /// The match percentage. + /// + public double MatchPercentage => Total == 0 ? 100 : 100.0 * Matched / Total; + + /// + /// Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. + /// + /// An object to compare with this instance. + /// + /// A value that indicates the relative order of the objects being compared. The return value has these meanings: Value Meaning Less than zero This instance precedes in the sort order. Zero This instance occurs in the same position in the sort order as . Greater than zero This instance follows in the sort order. + /// + /// + public int CompareTo(object obj) + { + var compareObj = (RequestMatchResult)obj; + + return compareObj.MatchPercentage.CompareTo(MatchPercentage); + } } } \ No newline at end of file diff --git a/src/WireMock.Net/Matchers/Request/RequestMessageBodyMatcher.cs b/src/WireMock.Net/Matchers/Request/RequestMessageBodyMatcher.cs index eb49c9b6..3276d70a 100644 --- a/src/WireMock.Net/Matchers/Request/RequestMessageBodyMatcher.cs +++ b/src/WireMock.Net/Matchers/Request/RequestMessageBodyMatcher.cs @@ -98,10 +98,22 @@ namespace WireMock.Matchers.Request /// Determines whether the specified RequestMessage is match. /// /// The RequestMessage. + /// The RequestMatchResult. /// /// true if the specified RequestMessage is match; otherwise, false. /// - public bool IsMatch(RequestMessage requestMessage) + public bool IsMatch(RequestMessage requestMessage, RequestMatchResult requestMatchResult) + { + bool isMatch = IsMatch(requestMessage); + if (isMatch) + requestMatchResult.Matched++; + + requestMatchResult.Total++; + + return isMatch; + } + + private bool IsMatch(RequestMessage requestMessage) { if (Matcher != null) return Matcher.IsMatch(requestMessage.Body); @@ -113,10 +125,10 @@ namespace WireMock.Matchers.Request return requestMessage.BodyAsBytes == _bodyData; if (Func != null) - return Func(requestMessage.Body); + return requestMessage.Body != null && Func(requestMessage.Body); - if (DataFunc != null) - return DataFunc(requestMessage.BodyAsBytes); + if (DataFunc != null && requestMessage.BodyAsBytes != null) + return requestMessage.BodyAsBytes != null && DataFunc(requestMessage.BodyAsBytes); return false; } diff --git a/src/WireMock.Net/Matchers/Request/RequestMessageCompositeMatcher.cs b/src/WireMock.Net/Matchers/Request/RequestMessageCompositeMatcher.cs index c7c94f9a..68d1f79c 100644 --- a/src/WireMock.Net/Matchers/Request/RequestMessageCompositeMatcher.cs +++ b/src/WireMock.Net/Matchers/Request/RequestMessageCompositeMatcher.cs @@ -37,14 +37,32 @@ namespace WireMock.Matchers.Request /// Determines whether the specified RequestMessage is match. /// /// The RequestMessage. + /// The RequestMatchResult. /// /// true if the specified RequestMessage is match; otherwise, false. /// - public virtual bool IsMatch(RequestMessage requestMessage) + public bool IsMatch(RequestMessage requestMessage, RequestMatchResult requestMatchResult) { - return _type == CompositeMatcherType.And ? - RequestMatchers.All(matcher => matcher.IsMatch(requestMessage)) : - RequestMatchers.Any(matcher => matcher.IsMatch(requestMessage)); + var list = new List(); + if (_type == CompositeMatcherType.And) + { + foreach (var requestMatcher in RequestMatchers) + { + bool isMatch = requestMatcher.IsMatch(requestMessage, requestMatchResult); + list.Add(isMatch); + } + + return list.All(match => match); + } + + //var orRequestMatchResult = new RequestMatchResult(); + foreach (var requestMatcher in RequestMatchers) + { + bool isMatch = requestMatcher.IsMatch(requestMessage, requestMatchResult); + list.Add(isMatch); + } + + return list.Any(match => match); } } } \ No newline at end of file diff --git a/src/WireMock.Net/Matchers/Request/RequestMessageCookieMatcher.cs b/src/WireMock.Net/Matchers/Request/RequestMessageCookieMatcher.cs index e47b53c7..92e933e6 100644 --- a/src/WireMock.Net/Matchers/Request/RequestMessageCookieMatcher.cs +++ b/src/WireMock.Net/Matchers/Request/RequestMessageCookieMatcher.cs @@ -25,7 +25,7 @@ namespace WireMock.Matchers.Request /// The matchers. /// public IMatcher[] Matchers { get; } - + /// /// Initializes a new instance of the class. /// @@ -70,17 +70,32 @@ namespace WireMock.Matchers.Request /// Determines whether the specified RequestMessage is match. /// /// The RequestMessage. + /// The RequestMatchResult. /// /// true if the specified RequestMessage is match; otherwise, false. /// - public bool IsMatch(RequestMessage requestMessage) + public bool IsMatch(RequestMessage requestMessage, RequestMatchResult requestMatchResult) + { + bool isMatch = IsMatch(requestMessage); + if (isMatch) + requestMatchResult.Matched++; + + requestMatchResult.Total++; + + return isMatch; + } + + private bool IsMatch(RequestMessage requestMessage) { if (Funcs != null) - return Funcs.Any(cf => cf(requestMessage.Cookies)); + return requestMessage.Cookies != null && Funcs.Any(cf => cf(requestMessage.Cookies)); if (requestMessage.Cookies == null) return false; + if (!requestMessage.Cookies.ContainsKey(Name)) + return false; + string headerValue = requestMessage.Cookies[Name]; return Matchers.Any(m => m.IsMatch(headerValue)); } diff --git a/src/WireMock.Net/Matchers/Request/RequestMessageHeaderMatcher.cs b/src/WireMock.Net/Matchers/Request/RequestMessageHeaderMatcher.cs index dc15a941..5dbb5e10 100644 --- a/src/WireMock.Net/Matchers/Request/RequestMessageHeaderMatcher.cs +++ b/src/WireMock.Net/Matchers/Request/RequestMessageHeaderMatcher.cs @@ -70,17 +70,32 @@ namespace WireMock.Matchers.Request /// Determines whether the specified RequestMessage is match. /// /// The RequestMessage. + /// The RequestMatchResult. /// /// true if the specified RequestMessage is match; otherwise, false. /// - public bool IsMatch(RequestMessage requestMessage) + public bool IsMatch(RequestMessage requestMessage, RequestMatchResult requestMatchResult) + { + bool isMatch = IsMatch(requestMessage); + if (isMatch) + requestMatchResult.Matched++; + + requestMatchResult.Total++; + + return isMatch; + } + + private bool IsMatch(RequestMessage requestMessage) { if (Funcs != null) - return Funcs.Any(hf => hf(requestMessage.Headers)); + return requestMessage.Headers != null && Funcs.Any(hf => hf(requestMessage.Headers)); if (requestMessage.Headers == null) return false; + if (!requestMessage.Headers.ContainsKey(Name)) + return false; + string headerValue = requestMessage.Headers[Name]; return Matchers.Any(m => m.IsMatch(headerValue)); } diff --git a/src/WireMock.Net/Matchers/Request/RequestMessageMethodMatcher.cs b/src/WireMock.Net/Matchers/Request/RequestMessageMethodMatcher.cs index e4759afc..fab35d62 100644 --- a/src/WireMock.Net/Matchers/Request/RequestMessageMethodMatcher.cs +++ b/src/WireMock.Net/Matchers/Request/RequestMessageMethodMatcher.cs @@ -30,10 +30,22 @@ namespace WireMock.Matchers.Request /// Determines whether the specified RequestMessage is match. /// /// The RequestMessage. + /// The RequestMatchResult. /// /// true if the specified RequestMessage is match; otherwise, false. /// - public bool IsMatch(RequestMessage requestMessage) + public bool IsMatch(RequestMessage requestMessage, RequestMatchResult requestMatchResult) + { + bool isMatch = IsMatch(requestMessage); + if (isMatch) + requestMatchResult.Matched++; + + requestMatchResult.Total++; + + return isMatch; + } + + private bool IsMatch(RequestMessage requestMessage) { return Methods.Contains(requestMessage.Method); } diff --git a/src/WireMock.Net/Matchers/Request/RequestMessageParamMatcher.cs b/src/WireMock.Net/Matchers/Request/RequestMessageParamMatcher.cs index 489ade9e..ea0a7102 100644 --- a/src/WireMock.Net/Matchers/Request/RequestMessageParamMatcher.cs +++ b/src/WireMock.Net/Matchers/Request/RequestMessageParamMatcher.cs @@ -59,13 +59,25 @@ namespace WireMock.Matchers.Request /// Determines whether the specified RequestMessage is match. /// /// The RequestMessage. + /// The RequestMatchResult. /// /// true if the specified RequestMessage is match; otherwise, false. /// - public bool IsMatch(RequestMessage requestMessage) + public bool IsMatch(RequestMessage requestMessage, RequestMatchResult requestMatchResult) + { + bool isMatch = IsMatch(requestMessage); + if (isMatch) + requestMatchResult.Matched++; + + requestMatchResult.Total++; + + return isMatch; + } + + private bool IsMatch(RequestMessage requestMessage) { if (Funcs != null) - return Funcs.Any(f => f(requestMessage.Query)); + return requestMessage.Query != null && Funcs.Any(f => f(requestMessage.Query)); var values = requestMessage.GetParameter(Key); return values?.Intersect(Values).Count() == Values.Count(); diff --git a/src/WireMock.Net/Matchers/Request/RequestMessagePathMatcher.cs b/src/WireMock.Net/Matchers/Request/RequestMessagePathMatcher.cs index 51408c87..a9baf374 100644 --- a/src/WireMock.Net/Matchers/Request/RequestMessagePathMatcher.cs +++ b/src/WireMock.Net/Matchers/Request/RequestMessagePathMatcher.cs @@ -53,16 +53,28 @@ namespace WireMock.Matchers.Request /// Determines whether the specified RequestMessage is match. /// /// The RequestMessage. + /// The RequestMatchResult. /// /// true if the specified RequestMessage is match; otherwise, false. /// - public bool IsMatch(RequestMessage requestMessage) + public bool IsMatch(RequestMessage requestMessage, RequestMatchResult requestMatchResult) + { + bool isMatch = IsMatch(requestMessage); + if (isMatch) + requestMatchResult.Matched++; + + requestMatchResult.Total++; + + return isMatch; + } + + private bool IsMatch(RequestMessage requestMessage) { if (Matchers != null) return Matchers.Any(matcher => matcher.IsMatch(requestMessage.Path)); if (Funcs != null) - return Funcs.Any(func => func(requestMessage.Path)); + return requestMessage.Path != null && Funcs.Any(func => func(requestMessage.Path)); return false; } diff --git a/src/WireMock.Net/Matchers/Request/RequestMessageUrlMatcher.cs b/src/WireMock.Net/Matchers/Request/RequestMessageUrlMatcher.cs index 56ee9771..5e1a1767 100644 --- a/src/WireMock.Net/Matchers/Request/RequestMessageUrlMatcher.cs +++ b/src/WireMock.Net/Matchers/Request/RequestMessageUrlMatcher.cs @@ -53,16 +53,28 @@ namespace WireMock.Matchers.Request /// Determines whether the specified RequestMessage is match. /// /// The RequestMessage. + /// The RequestMatchResult. /// /// true if the specified RequestMessage is match; otherwise, false. /// - public bool IsMatch(RequestMessage requestMessage) + public bool IsMatch(RequestMessage requestMessage, RequestMatchResult requestMatchResult) + { + bool isMatch = IsMatch(requestMessage); + if (isMatch) + requestMatchResult.Matched++; + + requestMatchResult.Total++; + + return isMatch; + } + + private bool IsMatch(RequestMessage requestMessage) { if (Matchers != null) return Matchers.Any(matcher => matcher.IsMatch(requestMessage.Url)); if (Funcs != null) - return Funcs.Any(func => func(requestMessage.Url)); + return requestMessage.Url != null && Funcs.Any(func => func(requestMessage.Url)); return false; } diff --git a/src/WireMock.Net/Server/FluentMockServer.Admin.cs b/src/WireMock.Net/Server/FluentMockServer.Admin.cs index 11e22f3d..1334f005 100644 --- a/src/WireMock.Net/Server/FluentMockServer.Admin.cs +++ b/src/WireMock.Net/Server/FluentMockServer.Admin.cs @@ -202,6 +202,11 @@ namespace WireMock.Server Body = logEntry.ResponseMessage.Body, BodyOriginal = logEntry.ResponseMessage.BodyOriginal, Headers = logEntry.ResponseMessage.Headers + }, + RequestMatchResult = new LogRequestMatchModel + { + Matched = logEntry.RequestMatchResult.Matched, + Total = logEntry.RequestMatchResult.Total } }; } diff --git a/src/WireMock.Net/Server/FluentMockServer.cs b/src/WireMock.Net/Server/FluentMockServer.cs index 9d078a0b..3a27405a 100644 --- a/src/WireMock.Net/Server/FluentMockServer.cs +++ b/src/WireMock.Net/Server/FluentMockServer.cs @@ -245,7 +245,8 @@ namespace WireMock.Server { lock (((ICollection)_logEntries).SyncRoot) { - return _logEntries.Where(log => matcher.IsMatch(log.RequestMessage)); + var requestMatchResult = new RequestMatchResult(); + return _logEntries.Where(log => matcher.IsMatch(log.RequestMessage, requestMatchResult)); } } @@ -330,12 +331,34 @@ namespace WireMock.Server var request = _requestMapper.Map(ctx.Request); ResponseMessage response = null; - + RequestMatchResult requestMatchResult = null; try { - var targetMapping = _mappings - .OrderBy(m => m.Priority) - .FirstOrDefault(m => m.IsRequestHandled(request)); + var possibleMatchingMappings = _mappings + .Select(m => new { Mapping = m, MatchResult = m.IsRequestHandled(request) }) + .ToList(); + + Mapping targetMapping; + if (_allowPartialMapping) + { + var orderedMappings = possibleMatchingMappings + .OrderBy(m => m.Mapping.Priority) + .ThenBy(m => m.MatchResult) + .ToList(); + + var bestPartialMatch = orderedMappings.FirstOrDefault(); + targetMapping = bestPartialMatch?.Mapping; + requestMatchResult = bestPartialMatch?.MatchResult; + } + else + { + var perfectMatch = possibleMatchingMappings + .OrderBy(m => m.Mapping.Priority) + .FirstOrDefault(m => m.MatchResult.IsPerfectMatch); + + targetMapping = perfectMatch?.Mapping; + requestMatchResult = perfectMatch?.MatchResult; + } if (targetMapping == null) { @@ -364,7 +387,8 @@ namespace WireMock.Server { Guid = Guid.NewGuid(), RequestMessage = request, - ResponseMessage = response + ResponseMessage = response, + RequestMatchResult = requestMatchResult }; LogRequest(log); diff --git a/test/WireMock.Net.Tests/FluentMockServerTests.cs b/test/WireMock.Net.Tests/FluentMockServerTests.cs index 16f1363a..4949c229 100644 --- a/test/WireMock.Net.Tests/FluentMockServerTests.cs +++ b/test/WireMock.Net.Tests/FluentMockServerTests.cs @@ -183,14 +183,14 @@ namespace WireMock.Net.Tests // when await new HttpClient().GetAsync("http://localhost:" + _server.Ports[0] + "/foo"); - _server.Reset(); + _server.ResetLogEntries(); // then Check.That(_server.LogEntries).IsEmpty(); } [Test] - public void Should_reset_routes() + public void Should_reset_mappings() { // given _server = FluentMockServer.Start(); @@ -203,9 +203,10 @@ namespace WireMock.Net.Tests .WithBody(@"{ msg: ""Hello world!""}")); // when - _server.Reset(); + _server.ResetMappings(); // then + Check.That(_server.Mappings).IsEmpty(); Check.ThatAsyncCode(() => new HttpClient().GetStringAsync("http://localhost:" + _server.Ports[0] + "/foo")) .ThrowsAny(); } diff --git a/test/WireMock.Net.Tests/RequestTests.cs b/test/WireMock.Net.Tests/RequestTests.cs index 17a56820..f37f805f 100644 --- a/test/WireMock.Net.Tests/RequestTests.cs +++ b/test/WireMock.Net.Tests/RequestTests.cs @@ -5,6 +5,7 @@ using NFluent; using NUnit.Framework; using WireMock.RequestBuilders; using WireMock.Matchers; +using WireMock.Matchers.Request; namespace WireMock.Net.Tests { @@ -21,7 +22,8 @@ namespace WireMock.Net.Tests var request = new RequestMessage(new Uri("http://localhost/foo"), "blabla"); // then - Check.That(spec.IsMatch(request)).IsTrue(); + var requestMatchResult = new RequestMatchResult(); + Check.That(spec.IsMatch(request, requestMatchResult)).IsTrue(); } [Test] @@ -32,8 +34,9 @@ namespace WireMock.Net.Tests var request1 = new RequestMessage(new Uri("http://localhost/x1"), "blabla"); var request2 = new RequestMessage(new Uri("http://localhost/x2"), "blabla"); - Check.That(requestBuilder.IsMatch(request1)).IsTrue(); - Check.That(requestBuilder.IsMatch(request2)).IsTrue(); + var requestMatchResult = new RequestMatchResult(); + Check.That(requestBuilder.IsMatch(request1, requestMatchResult)).IsTrue(); + Check.That(requestBuilder.IsMatch(request2, requestMatchResult)).IsTrue(); } [Test] @@ -46,7 +49,8 @@ namespace WireMock.Net.Tests var request = new RequestMessage(new Uri("http://localhost/foo"), "blabla"); // then - Check.That(spec.IsMatch(request)).IsTrue(); + var requestMatchResult = new RequestMatchResult(); + Check.That(spec.IsMatch(request, requestMatchResult)).IsTrue(); } [Test] @@ -59,7 +63,8 @@ namespace WireMock.Net.Tests var request = new RequestMessage(new Uri("http://localhost/foo/bar"), "blabla"); // then - Check.That(spec.IsMatch(request)).IsTrue(); + var requestMatchResult = new RequestMatchResult(); + Check.That(spec.IsMatch(request, requestMatchResult)).IsTrue(); } [Test] @@ -72,7 +77,8 @@ namespace WireMock.Net.Tests var request = new RequestMessage(new Uri("http://localhost/bar"), "blabla"); // then - Check.That(spec.IsMatch(request)).IsFalse(); + var requestMatchResult = new RequestMatchResult(); + Check.That(spec.IsMatch(request, requestMatchResult)).IsFalse(); } [Test] @@ -85,7 +91,8 @@ namespace WireMock.Net.Tests var request = new RequestMessage(new Uri("http://localhost/foo"), "blabla"); // then - Check.That(spec.IsMatch(request)).IsTrue(); + var requestMatchResult = new RequestMatchResult(); + Check.That(spec.IsMatch(request, requestMatchResult)).IsTrue(); } [Test] @@ -98,7 +105,8 @@ namespace WireMock.Net.Tests var request = new RequestMessage(new Uri("http://localhost/foo"), "PUT"); // then - Check.That(spec.IsMatch(request)).IsTrue(); + var requestMatchResult = new RequestMatchResult(); + Check.That(spec.IsMatch(request, requestMatchResult)).IsTrue(); } [Test] @@ -111,7 +119,8 @@ namespace WireMock.Net.Tests var request = new RequestMessage(new Uri("http://localhost/foo"), "POST"); // then - Check.That(spec.IsMatch(request)).IsTrue(); + var requestMatchResult = new RequestMatchResult(); + Check.That(spec.IsMatch(request, requestMatchResult)).IsTrue(); } [Test] @@ -124,7 +133,8 @@ namespace WireMock.Net.Tests var request = new RequestMessage(new Uri("http://localhost/foo"), "GET"); // then - Check.That(spec.IsMatch(request)).IsTrue(); + var requestMatchResult = new RequestMatchResult(); + Check.That(spec.IsMatch(request, requestMatchResult)).IsTrue(); } [Test] @@ -139,7 +149,8 @@ namespace WireMock.Net.Tests var request = new RequestMessage(new Uri("http://localhost/foo"), "Delete", body, bodyAsString); // then - Check.That(spec.IsMatch(request)).IsTrue(); + var requestMatchResult = new RequestMatchResult(); + Check.That(spec.IsMatch(request, requestMatchResult)).IsTrue(); } [Test] @@ -152,7 +163,8 @@ namespace WireMock.Net.Tests var request = new RequestMessage(new Uri("http://localhost/foo"), "HEAD"); // then - Check.That(spec.IsMatch(request)).IsTrue(); + var requestMatchResult = new RequestMatchResult(); + Check.That(spec.IsMatch(request, requestMatchResult)).IsTrue(); } [Test] @@ -165,7 +177,8 @@ namespace WireMock.Net.Tests var request = new RequestMessage(new Uri("http://localhost/foo"), "HEAD"); // then - Check.That(spec.IsMatch(request)).IsFalse(); + var requestMatchResult = new RequestMatchResult(); + Check.That(spec.IsMatch(request, requestMatchResult)).IsFalse(); } [Test] @@ -178,7 +191,8 @@ namespace WireMock.Net.Tests var request = new RequestMessage(new Uri("http://localhost/foo"), "PUT"); // then - Check.That(spec.IsMatch(request)).IsFalse(); + var requestMatchResult = new RequestMatchResult(); + Check.That(spec.IsMatch(request, requestMatchResult)).IsFalse(); } [Test] @@ -193,7 +207,8 @@ namespace WireMock.Net.Tests var request = new RequestMessage(new Uri("http://localhost/foo"), "PUT", body, bodyAsString, new Dictionary { { "X-toto", "tata" } }); // then - Check.That(spec.IsMatch(request)).IsTrue(); + var requestMatchResult = new RequestMatchResult(); + Check.That(spec.IsMatch(request, requestMatchResult)).IsTrue(); } [Test] @@ -208,7 +223,8 @@ namespace WireMock.Net.Tests var request = new RequestMessage(new Uri("http://localhost/foo"), "PUT", body, bodyAsString, new Dictionary { { "X-toto", "tata" } }); // then - Check.That(spec.IsMatch(request)).IsFalse(); + var requestMatchResult = new RequestMatchResult(); + Check.That(spec.IsMatch(request, requestMatchResult)).IsFalse(); } [Test] @@ -223,7 +239,8 @@ namespace WireMock.Net.Tests var request = new RequestMessage(new Uri("http://localhost/foo"), "PUT", body, bodyAsString, new Dictionary { { "X-toto", "ABC" } }); // then - Check.That(spec.IsMatch(request)).IsFalse(); + var requestMatchResult = new RequestMatchResult(); + Check.That(spec.IsMatch(request, requestMatchResult)).IsFalse(); } [Test] @@ -238,7 +255,8 @@ namespace WireMock.Net.Tests var request = new RequestMessage(new Uri("http://localhost/foo"), "PUT", body, bodyAsString, new Dictionary { { "X-toto", "TaTa" } }); // then - Check.That(spec.IsMatch(request)).IsTrue(); + var requestMatchResult = new RequestMatchResult(); + Check.That(spec.IsMatch(request, requestMatchResult)).IsTrue(); } [Test] @@ -251,7 +269,8 @@ namespace WireMock.Net.Tests var request = new RequestMessage(new Uri("http://localhost/foo"), "PUT", null, null, null, new Dictionary { { "session", "abc" } }); // then - Check.That(spec.IsMatch(request)).IsTrue(); + var requestMatchResult = new RequestMatchResult(); + Check.That(spec.IsMatch(request, requestMatchResult)).IsTrue(); } [Test] @@ -266,7 +285,8 @@ namespace WireMock.Net.Tests var request = new RequestMessage(new Uri("http://localhost/foo"), "PUT", body, bodyAsString); // then - Check.That(spec.IsMatch(request)).IsTrue(); + var requestMatchResult = new RequestMatchResult(); + Check.That(spec.IsMatch(request, requestMatchResult)).IsTrue(); } [Test] @@ -281,7 +301,8 @@ namespace WireMock.Net.Tests var request = new RequestMessage(new Uri("http://localhost/foo"), "PUT", body, bodyAsString, new Dictionary { { "X-toto", "tatata" } }); // then - Check.That(spec.IsMatch(request)).IsTrue(); + var requestMatchResult = new RequestMatchResult(); + Check.That(spec.IsMatch(request, requestMatchResult)).IsTrue(); } [Test] @@ -296,7 +317,8 @@ namespace WireMock.Net.Tests var request = new RequestMessage(new Uri("http://localhost/foo"), "PUT", body, bodyAsString); // then - Check.That(spec.IsMatch(request)).IsTrue(); + var requestMatchResult = new RequestMatchResult(); + Check.That(spec.IsMatch(request, requestMatchResult)).IsTrue(); } [Test] @@ -316,7 +338,8 @@ namespace WireMock.Net.Tests var request = new RequestMessage(new Uri("http://localhost/foo"), "PUT", body, xmlBodyAsString); // then - Check.That(spec.IsMatch(request)).IsTrue(); + var requestMatchResult = new RequestMatchResult(); + Check.That(spec.IsMatch(request, requestMatchResult)).IsTrue(); } [Test] @@ -336,7 +359,8 @@ namespace WireMock.Net.Tests var request = new RequestMessage(new Uri("http://localhost/foo"), "PUT", body, xmlBodyAsString); // then - Check.That(spec.IsMatch(request)).IsFalse(); + var requestMatchResult = new RequestMatchResult(); + Check.That(spec.IsMatch(request, requestMatchResult)).IsFalse(); } [Test] @@ -351,7 +375,8 @@ namespace WireMock.Net.Tests var request = new RequestMessage(new Uri("http://localhost/foo"), "PUT", body, bodyAsString); // then - Check.That(spec.IsMatch(request)).IsTrue(); + var requestMatchResult = new RequestMatchResult(); + Check.That(spec.IsMatch(request, requestMatchResult)).IsTrue(); } [Test] @@ -366,7 +391,8 @@ namespace WireMock.Net.Tests var request = new RequestMessage(new Uri("http://localhost/foo"), "PUT", body, bodyAsString); // then - Check.That(spec.IsMatch(request)).IsFalse(); + var requestMatchResult = new RequestMatchResult(); + Check.That(spec.IsMatch(request, requestMatchResult)).IsFalse(); } [Test] @@ -381,7 +407,8 @@ namespace WireMock.Net.Tests var request = new RequestMessage(new Uri("http://localhost/foo"), "PUT", body, bodyAsString, new Dictionary { { "X-toto", "tatata" } }); // then - Check.That(spec.IsMatch(request)).IsFalse(); + var requestMatchResult = new RequestMatchResult(); + Check.That(spec.IsMatch(request, requestMatchResult)).IsFalse(); } [Test] @@ -394,7 +421,8 @@ namespace WireMock.Net.Tests var request = new RequestMessage(new Uri("http://localhost/foo?bar=1&bar=2"), "PUT"); // then - Check.That(spec.IsMatch(request)).IsTrue(); + var requestMatchResult = new RequestMatchResult(); + Check.That(spec.IsMatch(request, requestMatchResult)).IsTrue(); } [Test] @@ -407,7 +435,8 @@ namespace WireMock.Net.Tests var request = new RequestMessage(new Uri("http://localhost/foo?bar"), "PUT"); // then - Check.That(spec.IsMatch(request)).IsTrue(); + var requestMatchResult = new RequestMatchResult(); + Check.That(spec.IsMatch(request, requestMatchResult)).IsTrue(); } [Test] @@ -420,7 +449,8 @@ namespace WireMock.Net.Tests var request = new RequestMessage(new Uri("http://localhost/foo?bar=1&bar=2"), "PUT"); // then - Check.That(spec.IsMatch(request)).IsTrue(); + var requestMatchResult = new RequestMatchResult(); + Check.That(spec.IsMatch(request, requestMatchResult)).IsTrue(); } [Test] @@ -433,7 +463,8 @@ namespace WireMock.Net.Tests var request = new RequestMessage(new Uri("http://localhost/test=7"), "PUT"); // then - Check.That(spec.IsMatch(request)).IsFalse(); + var requestMatchResult = new RequestMatchResult(); + Check.That(spec.IsMatch(request, requestMatchResult)).IsFalse(); } } }