Compare commits

..

9 Commits

Author SHA1 Message Date
Stef Heyenrath
13f87a1364 1.5.55 2024-05-22 16:38:30 +02:00
Stef Heyenrath
dd35cea44e When only Port is provided, bind to * (Fixes #1100) (#1107)
* Fix for #1100

* tst
2024-05-22 16:33:35 +02:00
Stef Heyenrath
11b39cf57c 1.5.54 2024-05-18 09:06:24 +02:00
Stef Heyenrath
2c001f661d Add support to bind to ip-address instead of only localhost (#1100)
* Add support to bind to ip-address instead of only localhost

* .

* .
2024-05-17 21:46:07 +02:00
Aaron Sherber
0b278dbbbb Use try..catch to set encoding in WireMockConsoleLogger (#1104) 2024-05-17 20:58:08 +02:00
Stef Heyenrath
add3f662ba Fix build for .NET Framework example projects #1103 2024-05-17 10:05:54 +02:00
Stef Heyenrath
c0c07ea127 1.5.53 2024-05-08 17:43:21 +02:00
Stef Heyenrath
e20a90b615 Fix MappingConverter to support Body with JsonMatcher (#1101)
* Fix MappingBuilder for Body

* .

* .

* Fix MappingConverter
2024-05-08 17:40:53 +02:00
Stef Heyenrath
9210957e55 Update Handlebars.Net (#1093)
* Use latest version (2.4.2) from Handlebars.Net.Helpers

* .1
2024-04-25 10:40:31 +02:00
30 changed files with 498 additions and 169 deletions

View File

@@ -1,3 +1,15 @@
# 1.5.55 (22 May 2024)
- [#1107](https://github.com/WireMock-Net/WireMock.Net/pull/1107) - When only Port is provided, bind to * (Fixes #1100) [bug] contributed by [StefH](https://github.com/StefH)
# 1.5.54 (18 May 2024)
- [#1100](https://github.com/WireMock-Net/WireMock.Net/pull/1100) - Add support to bind to ip-address instead of only localhost [feature] contributed by [StefH](https://github.com/StefH)
- [#1104](https://github.com/WireMock-Net/WireMock.Net/pull/1104) - Use try..catch to set encoding in WireMockConsoleLogger [feature] contributed by [asherber](https://github.com/asherber)
# 1.5.53 (08 May 2024)
- [#1093](https://github.com/WireMock-Net/WireMock.Net/pull/1093) - Update Handlebars.Net [feature] contributed by [StefH](https://github.com/StefH)
- [#1101](https://github.com/WireMock-Net/WireMock.Net/pull/1101) - Fix MappingConverter to support Body with JsonMatcher [bug] contributed by [StefH](https://github.com/StefH)
- [#1095](https://github.com/WireMock-Net/WireMock.Net/issues/1095) - When using C# code generation WithBody() matcher is not generated for POST Request [bug]
# 1.5.52 (06 April 2024) # 1.5.52 (06 April 2024)
- [#1091](https://github.com/WireMock-Net/WireMock.Net/pull/1091) - Add RegEx support to JsonMatcher [feature] contributed by [StefH](https://github.com/StefH) - [#1091](https://github.com/WireMock-Net/WireMock.Net/pull/1091) - Add RegEx support to JsonMatcher [feature] contributed by [StefH](https://github.com/StefH)
- [#1088](https://github.com/WireMock-Net/WireMock.Net/issues/1088) - Regex support for JsonMatcher [feature] - [#1088](https://github.com/WireMock-Net/WireMock.Net/issues/1088) - Regex support for JsonMatcher [feature]

View File

@@ -4,7 +4,7 @@
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<VersionPrefix>1.5.52</VersionPrefix> <VersionPrefix>1.5.55</VersionPrefix>
<PackageIcon>WireMock.Net-Logo.png</PackageIcon> <PackageIcon>WireMock.Net-Logo.png</PackageIcon>
<PackageProjectUrl>https://github.com/WireMock-Net/WireMock.Net</PackageProjectUrl> <PackageProjectUrl>https://github.com/WireMock-Net/WireMock.Net</PackageProjectUrl>
<PackageLicenseExpression>Apache-2.0</PackageLicenseExpression> <PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>

View File

@@ -1,6 +1,6 @@
rem https://github.com/StefH/GitHubReleaseNotes rem https://github.com/StefH/GitHubReleaseNotes
SET version=1.5.52 SET version=1.5.55
GitHubReleaseNotes --output CHANGELOG.md --skip-empty-releases --exclude-labels question invalid doc duplicate example --version %version% --token %GH_TOKEN% GitHubReleaseNotes --output CHANGELOG.md --skip-empty-releases --exclude-labels question invalid doc duplicate example --version %version% --token %GH_TOKEN%

View File

@@ -1,5 +1,4 @@
# 1.5.52 (06 April 2024) # 1.5.55 (22 May 2024)
- #1091 Add RegEx support to JsonMatcher [feature] - #1107 When only Port is provided, bind to * (Fixes #1100) [bug]
- #1088 Regex support for JsonMatcher [feature]
The full release notes can be found here: https://github.com/WireMock-Net/WireMock.Net/blob/master/CHANGELOG.md The full release notes can be found here: https://github.com/WireMock-Net/WireMock.Net/blob/master/CHANGELOG.md

View File

@@ -4,6 +4,7 @@ using System.Globalization;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Net; using System.Net;
using System.Net.Sockets;
using System.Threading.Tasks; using System.Threading.Tasks;
using Newtonsoft.Json; using Newtonsoft.Json;
using WireMock.Logging; using WireMock.Logging;
@@ -94,8 +95,70 @@ message HelloReply {
fullName:String fullName:String
}"; }";
private static void RunOnLocal()
{
var localIP = Dns.GetHostEntry(Dns.GetHostName()).AddressList.First(a => a.AddressFamily == AddressFamily.InterNetwork);
//try
//{
// var server = WireMockServer.Start(new WireMockServerSettings
// {
// Urls = new[] { $"http://{localIP}:9091" },
// StartAdminInterface = true
// });
// System.Console.WriteLine($"1: {string.Join(", ", server.Urls)}");
// System.Console.WriteLine("Press any key to stop...");
// System.Console.ReadKey();
// server.Stop();
//}
//catch (Exception e)
//{
// System.Console.WriteLine(e);
//}
try
{
var server = WireMockServer.Start(new WireMockServerSettings
{
Port = 9091,
StartAdminInterface = true
});
System.Console.WriteLine($"2: {string.Join(", ", server.Urls)}");
System.Console.WriteLine("Press any key to stop...");
System.Console.ReadKey();
server.Stop();
}
catch (Exception e)
{
System.Console.WriteLine(e);
}
//try
//{
// var server = WireMockServer.Start(new WireMockServerSettings
// {
// Urls = new[] { "http://*:9091" },
// StartAdminInterface = true
// });
// System.Console.WriteLine($"3: {string.Join(", ", server.Urls)}");
// System.Console.WriteLine("Press any key to stop...");
// System.Console.ReadKey();
// server.Stop();
//}
//catch (Exception e)
//{
// System.Console.WriteLine(e);
//}
}
public static void Run() public static void Run()
{ {
RunOnLocal();
return;
var mappingBuilder = new MappingBuilder(); var mappingBuilder = new MappingBuilder();
mappingBuilder mappingBuilder
.Given(Request .Given(Request

View File

@@ -39,17 +39,17 @@
<Reference Include="AnyOf, Version=0.3.0.0, Culture=neutral, PublicKeyToken=b35e6abbb527c6b1, processorArchitecture=MSIL"> <Reference Include="AnyOf, Version=0.3.0.0, Culture=neutral, PublicKeyToken=b35e6abbb527c6b1, processorArchitecture=MSIL">
<HintPath>..\..\packages\AnyOf.0.3.0\lib\net45\AnyOf.dll</HintPath> <HintPath>..\..\packages\AnyOf.0.3.0\lib\net45\AnyOf.dll</HintPath>
</Reference> </Reference>
<Reference Include="Handlebars, Version=2.1.4.0, Culture=neutral, PublicKeyToken=22225d0bf33cd661, processorArchitecture=MSIL"> <Reference Include="Handlebars, Version=2.1.6.0, Culture=neutral, PublicKeyToken=22225d0bf33cd661, processorArchitecture=MSIL">
<HintPath>..\..\packages\Handlebars.Net.2.1.4\lib\net452\Handlebars.dll</HintPath> <HintPath>..\..\packages\Handlebars.Net.2.1.6\lib\net451\Handlebars.dll</HintPath>
</Reference> </Reference>
<Reference Include="Handlebars.Net.Helpers, Version=2.4.0.0, Culture=neutral, PublicKeyToken=00d131fae0c250bc, processorArchitecture=MSIL"> <Reference Include="Handlebars.Net.Helpers, Version=2.4.3.0, Culture=neutral, PublicKeyToken=00d131fae0c250bc, processorArchitecture=MSIL">
<HintPath>..\..\packages\Handlebars.Net.Helpers.2.4.0\lib\net452\Handlebars.Net.Helpers.dll</HintPath> <HintPath>..\..\packages\Handlebars.Net.Helpers.2.4.3\lib\net452\Handlebars.Net.Helpers.dll</HintPath>
</Reference> </Reference>
<Reference Include="HandlebarsDotNet.Helpers.Core, Version=2.4.0.0, Culture=neutral, PublicKeyToken=00d131fae0c250bc, processorArchitecture=MSIL"> <Reference Include="HandlebarsDotNet.Helpers.Core, Version=2.4.3.0, Culture=neutral, PublicKeyToken=00d131fae0c250bc, processorArchitecture=MSIL">
<HintPath>..\..\packages\Handlebars.Net.Helpers.Core.2.4.0\lib\net452\HandlebarsDotNet.Helpers.Core.dll</HintPath> <HintPath>..\..\packages\Handlebars.Net.Helpers.Core.2.4.3\lib\net452\HandlebarsDotNet.Helpers.Core.dll</HintPath>
</Reference> </Reference>
<Reference Include="log4net, Version=2.0.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL"> <Reference Include="log4net, Version=2.0.17.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<HintPath>..\..\packages\log4net.2.0.15\lib\net45\log4net.dll</HintPath> <HintPath>..\..\packages\log4net.2.0.17\lib\net45\log4net.dll</HintPath>
</Reference> </Reference>
<Reference Include="Microsoft.CSharp" /> <Reference Include="Microsoft.CSharp" />
<Reference Include="Microsoft.Owin.Host.HttpListener, Version=3.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Reference Include="Microsoft.Owin.Host.HttpListener, Version=3.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

View File

@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="AnyOf" version="0.3.0" targetFramework="net452" /> <package id="AnyOf" version="0.3.0" targetFramework="net452" />
<package id="Handlebars.Net" version="2.1.4" targetFramework="net452" /> <package id="Handlebars.Net" version="2.1.6" targetFramework="net452" />
<package id="Handlebars.Net.Helpers" version="2.4.0" targetFramework="net452" /> <package id="Handlebars.Net.Helpers" version="2.4.3" targetFramework="net452" />
<package id="Handlebars.Net.Helpers.Core" version="2.4.0" targetFramework="net452" /> <package id="Handlebars.Net.Helpers.Core" version="2.4.3" targetFramework="net452" />
<package id="log4net" version="2.0.15" targetFramework="net452" /> <package id="log4net" version="2.0.17" targetFramework="net452" />
<package id="Microsoft.Owin.Host.HttpListener" version="3.1.0" targetFramework="net452" /> <package id="Microsoft.Owin.Host.HttpListener" version="3.1.0" targetFramework="net452" />
<package id="Newtonsoft.Json" version="13.0.3" targetFramework="net452" /> <package id="Newtonsoft.Json" version="13.0.3" targetFramework="net452" />
<package id="SimMetrics.Net" version="1.0.5" targetFramework="net452" /> <package id="SimMetrics.Net" version="1.0.5" targetFramework="net452" />

View File

@@ -38,17 +38,17 @@
<Reference Include="AnyOf, Version=0.3.0.0, Culture=neutral, PublicKeyToken=b35e6abbb527c6b1, processorArchitecture=MSIL"> <Reference Include="AnyOf, Version=0.3.0.0, Culture=neutral, PublicKeyToken=b35e6abbb527c6b1, processorArchitecture=MSIL">
<HintPath>..\..\packages\AnyOf.0.3.0\lib\net45\AnyOf.dll</HintPath> <HintPath>..\..\packages\AnyOf.0.3.0\lib\net45\AnyOf.dll</HintPath>
</Reference> </Reference>
<Reference Include="Handlebars, Version=2.1.4.0, Culture=neutral, PublicKeyToken=22225d0bf33cd661, processorArchitecture=MSIL"> <Reference Include="Handlebars, Version=2.1.6.0, Culture=neutral, PublicKeyToken=22225d0bf33cd661, processorArchitecture=MSIL">
<HintPath>..\..\packages\Handlebars.Net.2.1.4\lib\net46\Handlebars.dll</HintPath> <HintPath>..\..\packages\Handlebars.Net.2.1.6\lib\net451\Handlebars.dll</HintPath>
</Reference> </Reference>
<Reference Include="Handlebars.Net.Helpers, Version=2.4.0.0, Culture=neutral, PublicKeyToken=00d131fae0c250bc, processorArchitecture=MSIL"> <Reference Include="Handlebars.Net.Helpers, Version=2.4.3.0, Culture=neutral, PublicKeyToken=00d131fae0c250bc, processorArchitecture=MSIL">
<HintPath>..\..\packages\Handlebars.Net.Helpers.2.4.0\lib\net46\Handlebars.Net.Helpers.dll</HintPath> <HintPath>..\..\packages\Handlebars.Net.Helpers.2.4.3\lib\net46\Handlebars.Net.Helpers.dll</HintPath>
</Reference> </Reference>
<Reference Include="HandlebarsDotNet.Helpers.Core, Version=2.4.0.0, Culture=neutral, PublicKeyToken=00d131fae0c250bc, processorArchitecture=MSIL"> <Reference Include="HandlebarsDotNet.Helpers.Core, Version=2.4.3.0, Culture=neutral, PublicKeyToken=00d131fae0c250bc, processorArchitecture=MSIL">
<HintPath>..\..\packages\Handlebars.Net.Helpers.Core.2.4.0\lib\net46\HandlebarsDotNet.Helpers.Core.dll</HintPath> <HintPath>..\..\packages\Handlebars.Net.Helpers.Core.2.4.3\lib\net46\HandlebarsDotNet.Helpers.Core.dll</HintPath>
</Reference> </Reference>
<Reference Include="log4net, Version=2.0.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL"> <Reference Include="log4net, Version=2.0.17.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<HintPath>..\..\packages\log4net.2.0.15\lib\net45\log4net.dll</HintPath> <HintPath>..\..\packages\log4net.2.0.17\lib\net45\log4net.dll</HintPath>
</Reference> </Reference>
<Reference Include="Microsoft.Extensions.DependencyInjection.Abstractions, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL"> <Reference Include="Microsoft.Extensions.DependencyInjection.Abstractions, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
<HintPath>..\..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath> <HintPath>..\..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath>

View File

@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="AnyOf" version="0.3.0" targetFramework="net461" /> <package id="AnyOf" version="0.3.0" targetFramework="net461" />
<package id="Handlebars.Net" version="2.1.4" targetFramework="net461" /> <package id="Handlebars.Net" version="2.1.6" targetFramework="net461" />
<package id="Handlebars.Net.Helpers" version="2.4.0" targetFramework="net461" /> <package id="Handlebars.Net.Helpers" version="2.4.3" targetFramework="net461" />
<package id="Handlebars.Net.Helpers.Core" version="2.4.0" targetFramework="net461" /> <package id="Handlebars.Net.Helpers.Core" version="2.4.3" targetFramework="net461" />
<package id="log4net" version="2.0.15" targetFramework="net461" /> <package id="log4net" version="2.0.17" targetFramework="net461" />
<package id="Microsoft.Extensions.DependencyInjection.Abstractions" version="2.2.0" targetFramework="net461" /> <package id="Microsoft.Extensions.DependencyInjection.Abstractions" version="2.2.0" targetFramework="net461" />
<package id="Newtonsoft.Json" version="13.0.3" targetFramework="net461" /> <package id="Newtonsoft.Json" version="13.0.3" targetFramework="net461" />
<package id="SimMetrics.Net" version="1.0.5" targetFramework="net461" /> <package id="SimMetrics.Net" version="1.0.5" targetFramework="net461" />

View File

@@ -46,32 +46,32 @@
<Reference Include="Fare, Version=2.2.0.0, Culture=neutral, PublicKeyToken=ea68d375bf33a7c8, processorArchitecture=MSIL"> <Reference Include="Fare, Version=2.2.0.0, Culture=neutral, PublicKeyToken=ea68d375bf33a7c8, processorArchitecture=MSIL">
<HintPath>..\..\packages\Fare.2.2.1\lib\net35\Fare.dll</HintPath> <HintPath>..\..\packages\Fare.2.2.1\lib\net35\Fare.dll</HintPath>
</Reference> </Reference>
<Reference Include="Handlebars, Version=2.1.4.0, Culture=neutral, PublicKeyToken=22225d0bf33cd661, processorArchitecture=MSIL"> <Reference Include="Handlebars, Version=2.1.6.0, Culture=neutral, PublicKeyToken=22225d0bf33cd661, processorArchitecture=MSIL">
<HintPath>..\..\packages\Handlebars.Net.2.1.4\lib\net46\Handlebars.dll</HintPath> <HintPath>..\..\packages\Handlebars.Net.2.1.6\lib\net451\Handlebars.dll</HintPath>
</Reference> </Reference>
<Reference Include="Handlebars.Net.Helpers, Version=2.4.1.2, Culture=neutral, PublicKeyToken=00d131fae0c250bc, processorArchitecture=MSIL"> <Reference Include="Handlebars.Net.Helpers, Version=2.4.3.0, Culture=neutral, PublicKeyToken=00d131fae0c250bc, processorArchitecture=MSIL">
<HintPath>..\..\packages\Handlebars.Net.Helpers.2.4.1.2\lib\net46\Handlebars.Net.Helpers.dll</HintPath> <HintPath>..\..\packages\Handlebars.Net.Helpers.2.4.3\lib\net46\Handlebars.Net.Helpers.dll</HintPath>
</Reference> </Reference>
<Reference Include="HandlebarsDotNet.Helpers.Core, Version=2.4.1.2, Culture=neutral, PublicKeyToken=00d131fae0c250bc, processorArchitecture=MSIL"> <Reference Include="HandlebarsDotNet.Helpers.Core, Version=2.4.3.0, Culture=neutral, PublicKeyToken=00d131fae0c250bc, processorArchitecture=MSIL">
<HintPath>..\..\packages\Handlebars.Net.Helpers.Core.2.4.1.2\lib\net46\HandlebarsDotNet.Helpers.Core.dll</HintPath> <HintPath>..\..\packages\Handlebars.Net.Helpers.Core.2.4.3\lib\net46\HandlebarsDotNet.Helpers.Core.dll</HintPath>
</Reference> </Reference>
<Reference Include="HandlebarsDotNet.Helpers.DynamicLinq, Version=2.4.1.2, Culture=neutral, PublicKeyToken=00d131fae0c250bc, processorArchitecture=MSIL"> <Reference Include="HandlebarsDotNet.Helpers.DynamicLinq, Version=2.4.3.0, Culture=neutral, PublicKeyToken=00d131fae0c250bc, processorArchitecture=MSIL">
<HintPath>..\..\packages\Handlebars.Net.Helpers.DynamicLinq.2.4.1.2\lib\net46\HandlebarsDotNet.Helpers.DynamicLinq.dll</HintPath> <HintPath>..\..\packages\Handlebars.Net.Helpers.DynamicLinq.2.4.3\lib\net46\HandlebarsDotNet.Helpers.DynamicLinq.dll</HintPath>
</Reference> </Reference>
<Reference Include="HandlebarsDotNet.Helpers.Humanizer, Version=2.4.1.2, Culture=neutral, PublicKeyToken=00d131fae0c250bc, processorArchitecture=MSIL"> <Reference Include="HandlebarsDotNet.Helpers.Humanizer, Version=2.4.3.0, Culture=neutral, PublicKeyToken=00d131fae0c250bc, processorArchitecture=MSIL">
<HintPath>..\..\packages\Handlebars.Net.Helpers.Humanizer.2.4.1.2\lib\net46\HandlebarsDotNet.Helpers.Humanizer.dll</HintPath> <HintPath>..\..\packages\Handlebars.Net.Helpers.Humanizer.2.4.3\lib\net46\HandlebarsDotNet.Helpers.Humanizer.dll</HintPath>
</Reference> </Reference>
<Reference Include="HandlebarsDotNet.Helpers.Json, Version=2.4.1.2, Culture=neutral, PublicKeyToken=00d131fae0c250bc, processorArchitecture=MSIL"> <Reference Include="HandlebarsDotNet.Helpers.Json, Version=2.4.3.0, Culture=neutral, PublicKeyToken=00d131fae0c250bc, processorArchitecture=MSIL">
<HintPath>..\..\packages\Handlebars.Net.Helpers.Json.2.4.1.2\lib\net46\HandlebarsDotNet.Helpers.Json.dll</HintPath> <HintPath>..\..\packages\Handlebars.Net.Helpers.Json.2.4.3\lib\net46\HandlebarsDotNet.Helpers.Json.dll</HintPath>
</Reference> </Reference>
<Reference Include="HandlebarsDotNet.Helpers.Random, Version=2.4.1.2, Culture=neutral, PublicKeyToken=00d131fae0c250bc, processorArchitecture=MSIL"> <Reference Include="HandlebarsDotNet.Helpers.Random, Version=2.4.3.0, Culture=neutral, PublicKeyToken=00d131fae0c250bc, processorArchitecture=MSIL">
<HintPath>..\..\packages\Handlebars.Net.Helpers.Random.2.4.1.2\lib\net46\HandlebarsDotNet.Helpers.Random.dll</HintPath> <HintPath>..\..\packages\Handlebars.Net.Helpers.Random.2.4.3\lib\net46\HandlebarsDotNet.Helpers.Random.dll</HintPath>
</Reference> </Reference>
<Reference Include="HandlebarsDotNet.Helpers.Xeger, Version=2.4.1.2, Culture=neutral, PublicKeyToken=00d131fae0c250bc, processorArchitecture=MSIL"> <Reference Include="HandlebarsDotNet.Helpers.Xeger, Version=2.4.3.0, Culture=neutral, PublicKeyToken=00d131fae0c250bc, processorArchitecture=MSIL">
<HintPath>..\..\packages\Handlebars.Net.Helpers.Xeger.2.4.1.2\lib\net46\HandlebarsDotNet.Helpers.Xeger.dll</HintPath> <HintPath>..\..\packages\Handlebars.Net.Helpers.Xeger.2.4.3\lib\net46\HandlebarsDotNet.Helpers.Xeger.dll</HintPath>
</Reference> </Reference>
<Reference Include="HandlebarsDotNet.Helpers.XPath, Version=2.4.1.2, Culture=neutral, PublicKeyToken=00d131fae0c250bc, processorArchitecture=MSIL"> <Reference Include="HandlebarsDotNet.Helpers.XPath, Version=2.4.3.0, Culture=neutral, PublicKeyToken=00d131fae0c250bc, processorArchitecture=MSIL">
<HintPath>..\..\packages\Handlebars.Net.Helpers.XPath.2.4.1.2\lib\net46\HandlebarsDotNet.Helpers.XPath.dll</HintPath> <HintPath>..\..\packages\Handlebars.Net.Helpers.XPath.2.4.3\lib\net46\HandlebarsDotNet.Helpers.XPath.dll</HintPath>
</Reference> </Reference>
<Reference Include="Humanizer, Version=2.14.0.0, Culture=neutral, PublicKeyToken=979442b78dfc278e, processorArchitecture=MSIL"> <Reference Include="Humanizer, Version=2.14.0.0, Culture=neutral, PublicKeyToken=979442b78dfc278e, processorArchitecture=MSIL">
<HintPath>..\..\packages\Humanizer.Core.2.14.1\lib\netstandard2.0\Humanizer.dll</HintPath> <HintPath>..\..\packages\Humanizer.Core.2.14.1\lib\netstandard2.0\Humanizer.dll</HintPath>
@@ -79,8 +79,8 @@
<Reference Include="JmesPath.Net, Version=1.0.125.0, Culture=neutral, PublicKeyToken=b29d616b7f4faff0, processorArchitecture=MSIL"> <Reference Include="JmesPath.Net, Version=1.0.125.0, Culture=neutral, PublicKeyToken=b29d616b7f4faff0, processorArchitecture=MSIL">
<HintPath>..\..\packages\JmesPath.Net.1.0.125\lib\net45\JmesPath.Net.dll</HintPath> <HintPath>..\..\packages\JmesPath.Net.1.0.125\lib\net45\JmesPath.Net.dll</HintPath>
</Reference> </Reference>
<Reference Include="log4net, Version=2.0.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL"> <Reference Include="log4net, Version=2.0.17.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<HintPath>..\..\packages\log4net.2.0.15\lib\net45\log4net.dll</HintPath> <HintPath>..\..\packages\log4net.2.0.17\lib\net45\log4net.dll</HintPath>
</Reference> </Reference>
<Reference Include="Microsoft.AspNetCore, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL"> <Reference Include="Microsoft.AspNetCore, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
<HintPath>..\..\packages\Microsoft.AspNetCore.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.dll</HintPath> <HintPath>..\..\packages\Microsoft.AspNetCore.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.dll</HintPath>
@@ -307,8 +307,8 @@
<Reference Include="System.IO.Pipelines, Version=4.0.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> <Reference Include="System.IO.Pipelines, Version=4.0.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\..\packages\System.IO.Pipelines.4.5.3\lib\netstandard2.0\System.IO.Pipelines.dll</HintPath> <HintPath>..\..\packages\System.IO.Pipelines.4.5.3\lib\netstandard2.0\System.IO.Pipelines.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.Linq.Dynamic.Core, Version=1.3.1.0, Culture=neutral, PublicKeyToken=0f07ec44de6ac832, processorArchitecture=MSIL"> <Reference Include="System.Linq.Dynamic.Core, Version=1.3.14.0, Culture=neutral, PublicKeyToken=0f07ec44de6ac832, processorArchitecture=MSIL">
<HintPath>..\..\packages\System.Linq.Dynamic.Core.1.3.1\lib\net46\System.Linq.Dynamic.Core.dll</HintPath> <HintPath>..\..\packages\System.Linq.Dynamic.Core.1.3.14\lib\net46\System.Linq.Dynamic.Core.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.Memory, Version=4.0.1.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51"> <Reference Include="System.Memory, Version=4.0.1.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51">
<HintPath>..\..\packages/System.Memory.4.5.5/lib/net461/System.Memory.dll</HintPath> <HintPath>..\..\packages/System.Memory.4.5.5/lib/net461/System.Memory.dll</HintPath>
@@ -358,11 +358,11 @@
<Reference Include="TinyMapper, Version=3.0.1.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="TinyMapper, Version=3.0.1.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\packages\TinyMapper.3.0.3\lib\net40\TinyMapper.dll</HintPath> <HintPath>..\..\packages\TinyMapper.3.0.3\lib\net40\TinyMapper.dll</HintPath>
</Reference> </Reference>
<Reference Include="XPath2, Version=1.1.4.0, Culture=neutral, PublicKeyToken=463c6d7fb740c7e5, processorArchitecture=MSIL"> <Reference Include="XPath2, Version=1.1.5.0, Culture=neutral, PublicKeyToken=463c6d7fb740c7e5, processorArchitecture=MSIL">
<HintPath>..\..\packages\XPath2.1.1.4\lib\net452\XPath2.dll</HintPath> <HintPath>..\..\packages\XPath2.1.1.5\lib\net452\XPath2.dll</HintPath>
</Reference> </Reference>
<Reference Include="XPath2.Extensions, Version=1.1.4.0, Culture=neutral, PublicKeyToken=463c6d7fb740c7e5, processorArchitecture=MSIL"> <Reference Include="XPath2.Extensions, Version=1.1.5.0, Culture=neutral, PublicKeyToken=463c6d7fb740c7e5, processorArchitecture=MSIL">
<HintPath>..\..\packages\XPath2.Extensions.1.1.4\lib\net452\XPath2.Extensions.dll</HintPath> <HintPath>..\..\packages\XPath2.Extensions.1.1.5\lib\net452\XPath2.Extensions.dll</HintPath>
</Reference> </Reference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@@ -2,15 +2,15 @@
<packages> <packages>
<package id="AnyOf" version="0.3.0" targetFramework="net472" /> <package id="AnyOf" version="0.3.0" targetFramework="net472" />
<package id="Fare" version="2.2.1" targetFramework="net472" /> <package id="Fare" version="2.2.1" targetFramework="net472" />
<package id="Handlebars.Net" version="2.1.4" targetFramework="net472" /> <package id="Handlebars.Net" version="2.1.6" targetFramework="net472" />
<package id="Handlebars.Net.Helpers" version="2.4.1.2" targetFramework="net472" /> <package id="Handlebars.Net.Helpers" version="2.4.3" targetFramework="net472" />
<package id="Handlebars.Net.Helpers.Core" version="2.4.1.2" targetFramework="net472" /> <package id="Handlebars.Net.Helpers.Core" version="2.4.3" targetFramework="net472" />
<package id="Handlebars.Net.Helpers.DynamicLinq" version="2.4.1.2" targetFramework="net472" /> <package id="Handlebars.Net.Helpers.DynamicLinq" version="2.4.3" targetFramework="net472" />
<package id="Handlebars.Net.Helpers.Humanizer" version="2.4.1.2" targetFramework="net472" /> <package id="Handlebars.Net.Helpers.Humanizer" version="2.4.3" targetFramework="net472" />
<package id="Handlebars.Net.Helpers.Json" version="2.4.1.2" targetFramework="net472" /> <package id="Handlebars.Net.Helpers.Json" version="2.4.3" targetFramework="net472" />
<package id="Handlebars.Net.Helpers.Random" version="2.4.1.2" targetFramework="net472" /> <package id="Handlebars.Net.Helpers.Random" version="2.4.3" targetFramework="net472" />
<package id="Handlebars.Net.Helpers.Xeger" version="2.4.1.2" targetFramework="net472" /> <package id="Handlebars.Net.Helpers.Xeger" version="2.4.3" targetFramework="net472" />
<package id="Handlebars.Net.Helpers.XPath" version="2.4.1.2" targetFramework="net472" /> <package id="Handlebars.Net.Helpers.XPath" version="2.4.3" targetFramework="net472" />
<package id="Humanizer" version="2.14.1" targetFramework="net472" /> <package id="Humanizer" version="2.14.1" targetFramework="net472" />
<package id="Humanizer.Core" version="2.14.1" targetFramework="net472" /> <package id="Humanizer.Core" version="2.14.1" targetFramework="net472" />
<package id="Humanizer.Core.af" version="2.14.1" targetFramework="net472" /> <package id="Humanizer.Core.af" version="2.14.1" targetFramework="net472" />
@@ -62,7 +62,7 @@
<package id="Humanizer.Core.zh-Hans" version="2.14.1" targetFramework="net472" /> <package id="Humanizer.Core.zh-Hans" version="2.14.1" targetFramework="net472" />
<package id="Humanizer.Core.zh-Hant" version="2.14.1" targetFramework="net472" /> <package id="Humanizer.Core.zh-Hant" version="2.14.1" targetFramework="net472" />
<package id="JmesPath.Net" version="1.0.125" targetFramework="net472" /> <package id="JmesPath.Net" version="1.0.125" targetFramework="net472" />
<package id="log4net" version="2.0.15" targetFramework="net472" /> <package id="log4net" version="2.0.17" targetFramework="net472" />
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.8" targetFramework="net472" /> <package id="Microsoft.AspNet.WebApi.Client" version="5.2.8" targetFramework="net472" />
<package id="Microsoft.AspNetCore" version="2.2.0" targetFramework="net472" /> <package id="Microsoft.AspNetCore" version="2.2.0" targetFramework="net472" />
<package id="Microsoft.AspNetCore.Authentication.Abstractions" version="2.2.0" targetFramework="net472" /> <package id="Microsoft.AspNetCore.Authentication.Abstractions" version="2.2.0" targetFramework="net472" />
@@ -138,7 +138,7 @@
<package id="System.Diagnostics.DiagnosticSource" version="4.5.0" targetFramework="net472" /> <package id="System.Diagnostics.DiagnosticSource" version="4.5.0" targetFramework="net472" />
<package id="System.IdentityModel.Tokens.Jwt" version="6.34.0" targetFramework="net472" /> <package id="System.IdentityModel.Tokens.Jwt" version="6.34.0" targetFramework="net472" />
<package id="System.IO.Pipelines" version="4.5.3" targetFramework="net472" /> <package id="System.IO.Pipelines" version="4.5.3" targetFramework="net472" />
<package id="System.Linq.Dynamic.Core" version="1.3.1" targetFramework="net472" /> <package id="System.Linq.Dynamic.Core" version="1.3.14" targetFramework="net472" />
<package id="System.Memory" version="4.5.5" targetFramework="net472" /> <package id="System.Memory" version="4.5.5" targetFramework="net472" />
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net472" /> <package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net472" />
<package id="System.Reflection.Metadata" version="1.6.0" targetFramework="net472" /> <package id="System.Reflection.Metadata" version="1.6.0" targetFramework="net472" />
@@ -151,6 +151,6 @@
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net472" /> <package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net472" />
<package id="System.ValueTuple" version="4.5.0" targetFramework="net472" /> <package id="System.ValueTuple" version="4.5.0" targetFramework="net472" />
<package id="TinyMapper" version="3.0.3" targetFramework="net472" /> <package id="TinyMapper" version="3.0.3" targetFramework="net472" />
<package id="XPath2" version="1.1.4" targetFramework="net472" /> <package id="XPath2" version="1.1.5" targetFramework="net472" />
<package id="XPath2.Extensions" version="1.1.4" targetFramework="net472" /> <package id="XPath2.Extensions" version="1.1.5" targetFramework="net472" />
</packages> </packages>

View File

@@ -18,6 +18,5 @@ public class DynamicDataGeneration : WireMockOpenApiParserDynamicExampleValues
Pattern = $"[0-9A-Z]{{{maxLength}}}" Pattern = $"[0-9A-Z]{{{maxLength}}}"
}).Generate() ?? "example-string"; }).Generate() ?? "example-string";
} }
set { }
} }
} }

View File

@@ -23,10 +23,10 @@ public class WireMockOpenApiParserDynamicExampleValues : IWireMockOpenApiParserE
public virtual double Double => RandomizerFactory.GetRandomizer(new FieldOptionsDouble()).Generate() ?? 4.2d; public virtual double Double => RandomizerFactory.GetRandomizer(new FieldOptionsDouble()).Generate() ?? 4.2d;
/// <inheritdoc /> /// <inheritdoc />
public virtual Func<DateTime> Date { get { return () => RandomizerFactory.GetRandomizer(new FieldOptionsDateTime()).Generate() ?? System.DateTime.UtcNow.Date; } } public virtual Func<DateTime> Date => () => RandomizerFactory.GetRandomizer(new FieldOptionsDateTime()).Generate() ?? System.DateTime.UtcNow.Date;
/// <inheritdoc /> /// <inheritdoc />
public virtual Func<DateTime> DateTime { get { return () => RandomizerFactory.GetRandomizer(new FieldOptionsDateTime()).Generate() ?? System.DateTime.UtcNow; } } public virtual Func<DateTime> DateTime => () => RandomizerFactory.GetRandomizer(new FieldOptionsDateTime()).Generate() ?? System.DateTime.UtcNow;
/// <inheritdoc /> /// <inheritdoc />
public virtual byte[] Bytes => RandomizerFactory.GetRandomizer(new FieldOptionsBytes()).Generate(); public virtual byte[] Bytes => RandomizerFactory.GetRandomizer(new FieldOptionsBytes()).Generate();

View File

@@ -15,7 +15,11 @@ public class WireMockConsoleLogger : IWireMockLogger
/// </summary> /// </summary>
public WireMockConsoleLogger() public WireMockConsoleLogger()
{ {
Console.OutputEncoding = System.Text.Encoding.UTF8; try
{
Console.OutputEncoding = System.Text.Encoding.UTF8;
}
catch { }
} }
/// <see cref="IWireMockLogger.Debug"/> /// <see cref="IWireMockLogger.Debug"/>

View File

@@ -1,5 +1,7 @@
#if USE_ASPNETCORE && !NETSTANDARD1_3 #if USE_ASPNETCORE && !NETSTANDARD1_3
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Net;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Server.Kestrel.Core; using Microsoft.AspNetCore.Server.Kestrel.Core;
using Microsoft.AspNetCore.Server.Kestrel.Https; using Microsoft.AspNetCore.Server.Kestrel.Https;
@@ -25,7 +27,7 @@ namespace WireMock.Owin
{ {
if (urlDetail.IsHttps) if (urlDetail.IsHttps)
{ {
kestrelOptions.ListenAnyIP(urlDetail.Port, listenOptions => Listen(kestrelOptions, urlDetail, listenOptions =>
{ {
listenOptions.UseHttps(options => listenOptions.UseHttps(options =>
{ {
@@ -37,10 +39,11 @@ namespace WireMock.Owin
wireMockMiddlewareOptions.X509ThumbprintOrSubjectName, wireMockMiddlewareOptions.X509ThumbprintOrSubjectName,
wireMockMiddlewareOptions.X509CertificateFilePath, wireMockMiddlewareOptions.X509CertificateFilePath,
wireMockMiddlewareOptions.X509CertificatePassword, wireMockMiddlewareOptions.X509CertificatePassword,
urlDetail.Host); urlDetail.Host
);
} }
options.ClientCertificateMode = (ClientCertificateMode) wireMockMiddlewareOptions.ClientCertificateMode; options.ClientCertificateMode = (ClientCertificateMode)wireMockMiddlewareOptions.ClientCertificateMode;
if (wireMockMiddlewareOptions.AcceptAnyClientCertificate) if (wireMockMiddlewareOptions.AcceptAnyClientCertificate)
{ {
options.ClientCertificateValidation = (_, _, _) => true; options.ClientCertificateValidation = (_, _, _) => true;
@@ -52,20 +55,41 @@ namespace WireMock.Owin
listenOptions.Protocols = HttpProtocols.Http2; listenOptions.Protocols = HttpProtocols.Http2;
} }
}); });
continue;
} }
else if (urlDetail.IsHttp2)
if (urlDetail.IsHttp2)
{ {
kestrelOptions.ListenAnyIP(urlDetail.Port, listenOptions => Listen(kestrelOptions, urlDetail, listenOptions =>
{ {
listenOptions.Protocols = HttpProtocols.Http2; listenOptions.Protocols = HttpProtocols.Http2;
}); });
continue;
} }
else
{ Listen(kestrelOptions, urlDetail, _ => { });
kestrelOptions.ListenAnyIP(urlDetail.Port);
}
} }
} }
private static void Listen(KestrelServerOptions kestrelOptions, HostUrlDetails urlDetail, Action<ListenOptions> configure)
{
// Listens on ::1 and 127.0.0.1 with the given port.
if (urlDetail is { Port: > 0, Host: "localhost" or "127.0.0.1" or "0.0.0.0" or "::1" })
{
kestrelOptions.ListenLocalhost(urlDetail.Port, configure);
return;
}
// Try to parse the host as a valid IP address and bind to the given IP address and port.
if (IPAddress.TryParse(urlDetail.Host, out var ipAddress))
{
kestrelOptions.Listen(ipAddress, urlDetail.Port, configure);
return;
}
// Otherwise, listen on all IPs.
kestrelOptions.ListenAnyIP(urlDetail.Port, configure);
}
} }
internal static class IWebHostBuilderExtensions internal static class IWebHostBuilderExtensions

View File

@@ -6,7 +6,7 @@ namespace WireMock.Owin;
internal class HostUrlOptions internal class HostUrlOptions
{ {
private const string Localhost = "localhost"; private const string Star = "*";
public ICollection<string>? Urls { get; set; } public ICollection<string>? Urls { get; set; }
@@ -25,16 +25,16 @@ internal class HostUrlOptions
{ {
var port = Port > 0 ? Port.Value : FindFreeTcpPort(); var port = Port > 0 ? Port.Value : FindFreeTcpPort();
var scheme = HostingScheme == HostingScheme.Https ? "https" : "http"; var scheme = HostingScheme == HostingScheme.Https ? "https" : "http";
list.Add(new HostUrlDetails { IsHttps = HostingScheme == HostingScheme.Https, IsHttp2 = UseHttp2 == true, Url = $"{scheme}://{Localhost}:{port}", Scheme = scheme, Host = Localhost, Port = port }); list.Add(new HostUrlDetails { IsHttps = HostingScheme == HostingScheme.Https, IsHttp2 = UseHttp2 == true, Url = $"{scheme}://{Star}:{port}", Scheme = scheme, Host = Star, Port = port });
} }
if (HostingScheme == HostingScheme.HttpAndHttps) if (HostingScheme == HostingScheme.HttpAndHttps)
{ {
var httpPort = Port > 0 ? Port.Value : FindFreeTcpPort(); var httpPort = Port > 0 ? Port.Value : FindFreeTcpPort();
list.Add(new HostUrlDetails { IsHttps = false, IsHttp2 = UseHttp2 == true, Url = $"http://{Localhost}:{httpPort}", Scheme = "http", Host = Localhost, Port = httpPort }); list.Add(new HostUrlDetails { IsHttps = false, IsHttp2 = UseHttp2 == true, Url = $"http://{Star}:{httpPort}", Scheme = "http", Host = Star, Port = httpPort });
var httpsPort = FindFreeTcpPort(); // In this scenario, always get a free port for https. var httpsPort = FindFreeTcpPort(); // In this scenario, always get a free port for https.
list.Add(new HostUrlDetails { IsHttps = true, IsHttp2 = UseHttp2 == true, Url = $"https://{Localhost}:{httpsPort}", Scheme = "https", Host = Localhost, Port = httpsPort }); list.Add(new HostUrlDetails { IsHttps = true, IsHttp2 = UseHttp2 == true, Url = $"https://{Star}:{httpsPort}", Scheme = "https", Host = Star, Port = httpsPort });
} }
} }
else else

View File

@@ -143,25 +143,21 @@ internal class MappingConverter
if (requestMessageBodyMatcher is { Matchers: { } }) if (requestMessageBodyMatcher is { Matchers: { } })
{ {
if (requestMessageBodyMatcher.Matchers.OfType<WildcardMatcher>().FirstOrDefault() is { } wildcardMatcher && wildcardMatcher.GetPatterns().Any()) var firstMatcher = requestMessageBodyMatcher.Matchers.FirstOrDefault();
if (firstMatcher is WildcardMatcher wildcardMatcher && wildcardMatcher.GetPatterns().Any())
{ {
sb.AppendLine($" .WithBody({GetString(wildcardMatcher)})"); sb.AppendLine($" .WithBody({GetString(wildcardMatcher)})");
} }
else if (requestMessageBodyMatcher.Matchers.OfType<JsonPartialMatcher>().FirstOrDefault() is { Value: { } } jsonPartialMatcher)
if (firstMatcher is JsonMatcher jsonMatcher)
{ {
sb.AppendLine(@$" .WithBody(new JsonPartialMatcher( var matcherType = jsonMatcher.GetType().Name;
value: {ToCSharpStringLiteral(jsonPartialMatcher.Value.ToString())}, sb.AppendLine($" .WithBody(new {matcherType}(");
ignoreCase: {ToCSharpBooleanLiteral(jsonPartialMatcher.IgnoreCase)}, sb.AppendLine($" value: {ConvertToAnonymousObjectDefinition(jsonMatcher.Value, 3)},");
regex: {ToCSharpBooleanLiteral(jsonPartialMatcher.Regex)} sb.AppendLine($" ignoreCase: {ToCSharpBooleanLiteral(jsonMatcher.IgnoreCase)},");
))"); sb.AppendLine($" regex: {ToCSharpBooleanLiteral(jsonMatcher.Regex)}");
} sb.AppendLine(@" ))");
else if (requestMessageBodyMatcher.Matchers.OfType<JsonPartialWildcardMatcher>().FirstOrDefault() is { Value: { } } jsonPartialWildcardMatcher)
{
sb.AppendLine(@$" .WithBody(new JsonPartialWildcardMatcher(
value: {ToCSharpStringLiteral(jsonPartialWildcardMatcher.Value.ToString())},
ignoreCase: {ToCSharpBooleanLiteral(jsonPartialWildcardMatcher.IgnoreCase)},
regex: {ToCSharpBooleanLiteral(jsonPartialWildcardMatcher.Regex)}
))");
} }
} }

View File

@@ -344,15 +344,13 @@ public partial class WireMockServer
private static MappingConverterType GetMappingConverterType(IRequestMessage requestMessage) private static MappingConverterType GetMappingConverterType(IRequestMessage requestMessage)
{ {
var mappingConverterType = MappingConverterType.Server;
if (requestMessage.QueryIgnoreCase?.TryGetValue(nameof(MappingConverterType), out var values) == true && if (requestMessage.QueryIgnoreCase?.TryGetValue(nameof(MappingConverterType), out var values) == true &&
Enum.TryParse(values.FirstOrDefault(), true, out MappingConverterType parsed)) Enum.TryParse(values.FirstOrDefault(), true, out MappingConverterType parsed))
{ {
mappingConverterType = parsed; return parsed;
} }
return mappingConverterType; return MappingConverterType.Server;
} }
private IMapping? FindMappingByGuid(IRequestMessage requestMessage) private IMapping? FindMappingByGuid(IRequestMessage requestMessage)

View File

@@ -10,6 +10,8 @@ namespace WireMock.Util;
internal static class CSharpFormatter internal static class CSharpFormatter
{ {
private const string Null = "null";
#region Reserved Keywords #region Reserved Keywords
private static readonly HashSet<string> CSharpReservedKeywords = new(new[] private static readonly HashSet<string> CSharpReservedKeywords = new(new[]
{ {
@@ -92,17 +94,15 @@ internal static class CSharpFormatter
"while" "while"
}); });
#endregion #endregion
private const string Null = "null"; public static object ConvertToAnonymousObjectDefinition(object jsonBody, int ind = 2)
public static object ConvertToAnonymousObjectDefinition(object jsonBody)
{ {
var serializedBody = JsonConvert.SerializeObject(jsonBody); var serializedBody = JsonConvert.SerializeObject(jsonBody);
using var jsonReader = new JsonTextReader(new StringReader(serializedBody)); using var jsonReader = new JsonTextReader(new StringReader(serializedBody));
jsonReader.DateParseHandling = DateParseHandling.None; jsonReader.DateParseHandling = DateParseHandling.None;
var deserializedBody = JObject.Load(jsonReader); var deserializedBody = JObject.Load(jsonReader);
return ConvertJsonToAnonymousObjectDefinition(deserializedBody, 2); return ConvertJsonToAnonymousObjectDefinition(deserializedBody, ind);
} }
public static string ConvertJsonToAnonymousObjectDefinition(JToken token, int ind = 0) public static string ConvertJsonToAnonymousObjectDefinition(JToken token, int ind = 0)

View File

@@ -72,7 +72,6 @@
</ItemGroup> </ItemGroup>
<ItemGroup Condition=" '$(TargetFramework)' != 'netstandard1.3' "> <ItemGroup Condition=" '$(TargetFramework)' != 'netstandard1.3' ">
<PackageReference Include="XPath2.Extensions" Version="1.1.4" />
<PackageReference Include="Microsoft.IdentityModel.Protocols.OpenIdConnect" Version="6.34.0" /> <PackageReference Include="Microsoft.IdentityModel.Protocols.OpenIdConnect" Version="6.34.0" />
</ItemGroup> </ItemGroup>
@@ -182,13 +181,13 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Handlebars.Net.Helpers" Version="2.4.1.4" /> <PackageReference Include="Handlebars.Net.Helpers" Version="2.4.2.1" />
<PackageReference Include="Handlebars.Net.Helpers.DynamicLinq" Version="2.4.1.4" /> <PackageReference Include="Handlebars.Net.Helpers.DynamicLinq" Version="2.4.2.1" />
<PackageReference Include="Handlebars.Net.Helpers.Humanizer" Version="2.4.1.4" /> <PackageReference Include="Handlebars.Net.Helpers.Humanizer" Version="2.4.2.1" />
<PackageReference Include="Handlebars.Net.Helpers.Json" Version="2.4.1.4" /> <PackageReference Include="Handlebars.Net.Helpers.Json" Version="2.4.2.1" />
<PackageReference Include="Handlebars.Net.Helpers.Random" Version="2.4.1.4" /> <PackageReference Include="Handlebars.Net.Helpers.Random" Version="2.4.2.1" />
<PackageReference Include="Handlebars.Net.Helpers.XPath" Version="2.4.1.4" /> <PackageReference Include="Handlebars.Net.Helpers.XPath" Version="2.4.2.1" />
<PackageReference Include="Handlebars.Net.Helpers.Xeger" Version="2.4.1.4" /> <PackageReference Include="Handlebars.Net.Helpers.Xeger" Version="2.4.2.1" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@@ -1,11 +1,49 @@
var server = WireMockServer.Start(); var server = WireMockServer.Start();
server
.Given(Request.Create()
.UsingMethod("POST")
.WithPath("/users/post1")
.WithBody(new JsonMatcher(
value: new
{
city = "Amsterdam",
country = "The Netherlands"
},
ignoreCase: false,
regex: false
))
)
.WithGuid("90356dba-b36c-469a-a17e-669cd84f1f05")
.RespondWith(Response.Create()
);
server
.Given(Request.Create()
.UsingMethod("POST")
.WithPath("/users/post2")
.WithBody(new JsonPartialMatcher(
value: new
{
city = "City",
country = "Country"
},
ignoreCase: false,
regex: false
))
)
.WithGuid("1b731398-4a5b-457f-a6e3-d65e541c428f")
.RespondWith(Response.Create()
.WithBody(@"Line1
Some ""value"" in Line2")
);
server server
.Given(Request.Create() .Given(Request.Create()
.UsingMethod("GET") .UsingMethod("GET")
.WithPath("/foo1") .WithPath("/foo1")
.WithParam("p1", "xyz") .WithParam("p1", "xyz")
) )
.WithGuid("90356dba-b36c-469a-a17e-669cd84f1f05") .WithGuid("f74fd144-df53-404f-8e35-da22a640bd5f")
.RespondWith(Response.Create() .RespondWith(Response.Create()
.WithStatusCode(200) .WithStatusCode(200)
.WithBody("1") .WithBody("1")
@@ -18,7 +56,7 @@ server
.WithParam("p2", "abc") .WithParam("p2", "abc")
.WithHeader("h1", "W/\"234f2q3r\"", true) .WithHeader("h1", "W/\"234f2q3r\"", true)
) )
.WithGuid("1b731398-4a5b-457f-a6e3-d65e541c428f") .WithGuid("4126dec8-470b-4eff-93bb-c24f83b8b1fd")
.RespondWith(Response.Create() .RespondWith(Response.Create()
.WithStatusCode("201") .WithStatusCode("201")
.WithHeader("hk", "hv") .WithHeader("hk", "hv")
@@ -31,7 +69,7 @@ server
.UsingMethod("DELETE") .UsingMethod("DELETE")
.WithUrl("https://localhost/test") .WithUrl("https://localhost/test")
) )
.WithGuid("f74fd144-df53-404f-8e35-da22a640bd5f") .WithGuid("c9929240-7ae8-4a5d-8ed8-0913479f6eeb")
.RespondWith(Response.Create() .RespondWith(Response.Create()
.WithStatusCode(208) .WithStatusCode(208)
.WithBodyAsJson(new .WithBodyAsJson(new
@@ -70,20 +108,3 @@ text
}) })
); );
server
.Given(Request.Create()
.UsingMethod("POST")
.WithPath("/foo3")
.WithBody(new JsonPartialMatcher(
value: "{ a = 1, b = 2 }",
ignoreCase: false,
regex: false
))
)
.WithGuid("4126dec8-470b-4eff-93bb-c24f83b8b1fd")
.RespondWith(Response.Create()
.WithStatusCode(200)
.WithBody(@"Line1
Some ""value"" in Line2")
);

View File

@@ -491,7 +491,7 @@ public partial class WireMockAdminApiTests
server.Stop(); server.Stop();
} }
[Fact] [Fact]
public async Task IWireMockAdminApi_GetRequestsAsync_Json() public async Task IWireMockAdminApi_GetRequestsAsync_Json()
{ {
@@ -862,8 +862,37 @@ public partial class WireMockAdminApiTests
var guid2 = Guid.Parse("1b731398-4a5b-457f-a6e3-d65e541c428f"); var guid2 = Guid.Parse("1b731398-4a5b-457f-a6e3-d65e541c428f");
var guid3 = Guid.Parse("f74fd144-df53-404f-8e35-da22a640bd5f"); var guid3 = Guid.Parse("f74fd144-df53-404f-8e35-da22a640bd5f");
var guid4 = Guid.Parse("4126DEC8-470B-4EFF-93BB-C24F83B8B1FD"); var guid4 = Guid.Parse("4126DEC8-470B-4EFF-93BB-C24F83B8B1FD");
var guid5 = Guid.Parse("c9929240-7ae8-4a5d-8ed8-0913479f6eeb");
var server = WireMockServer.StartWithAdminInterface(); var server = WireMockServer.StartWithAdminInterface();
server
.Given(
Request.Create()
.WithPath("/users/post1")
.UsingPost()
.WithBody(new JsonMatcher(new
{
city = "Amsterdam",
country = "The Netherlands"
}))
)
.WithGuid(guid1)
.RespondWith(Response.Create());
server
.Given(
Request.Create()
.WithPath("/users/post2")
.UsingPost()
.WithBody(new JsonPartialMatcher(new
{
city = "City",
country = "Country"
}))
)
.WithGuid(guid2)
.RespondWith(Response.Create().WithBody("Line1\r\nSome \"value\" in Line2"));
server server
.Given( .Given(
Request.Create() Request.Create()
@@ -871,7 +900,7 @@ public partial class WireMockAdminApiTests
.WithParam("p1", "xyz") .WithParam("p1", "xyz")
.UsingGet() .UsingGet()
) )
.WithGuid(guid1) .WithGuid(guid3)
.RespondWith( .RespondWith(
Response.Create() Response.Create()
.WithStatusCode(200) .WithStatusCode(200)
@@ -886,7 +915,7 @@ public partial class WireMockAdminApiTests
.WithHeader("h1", "W/\"234f2q3r\"") .WithHeader("h1", "W/\"234f2q3r\"")
.UsingPost() .UsingPost()
) )
.WithGuid(guid2) .WithGuid(guid4)
.RespondWith( .RespondWith(
Response.Create() Response.Create()
.WithStatusCode("201") .WithStatusCode("201")
@@ -901,36 +930,43 @@ public partial class WireMockAdminApiTests
.WithUrl("https://localhost/test") .WithUrl("https://localhost/test")
.UsingDelete() .UsingDelete()
) )
.WithGuid(guid3) .WithGuid(guid5)
.RespondWith( .RespondWith(
Response.Create() Response.Create()
.WithStatusCode(HttpStatusCode.AlreadyReported) .WithStatusCode(HttpStatusCode.AlreadyReported)
.WithBodyAsJson(new { @as = 1, b = 1.2, d = true, e = false, f = new[] { 1, 2, 3, 4 }, g = new { z1 = 1, z2 = 2, z3 = new[] { "a", "b", "c" }, z4 = new[] { new { a = 1, b = 2 }, new { a = 2, b = 3 } } }, date_field = new DateTime(2023, 05, 08, 11, 20, 19), string_field_with_date = "2021-03-13T21:04:00Z", multiline_text = @"This .WithBodyAsJson(new
{
@as = 1,
b = 1.2,
d = true,
e = false,
f = new[] { 1, 2, 3, 4 },
g = new
{
z1 = 1,
z2 = 2,
z3 = new[] { "a", "b", "c" },
z4 = new[]
{
new { a = 1, b = 2 },
new { a = 2, b = 3 }
}
},
date_field = new DateTime(2023, 05, 08, 11, 20, 19),
string_field_with_date = "2021-03-13T21:04:00Z",
multiline_text = @"This
is is
multiline multiline
text text
" }) "
); })
server
.Given(
Request.Create()
.WithPath("/foo3")
.WithBody(new JsonPartialMatcher(new { a = 1, b = 2 }))
.UsingPost()
)
.WithGuid(guid4)
.RespondWith(
Response.Create()
.WithStatusCode(200)
.WithBody("Line1\r\nSome \"value\" in Line2")
); );
// Act // Act
var api = RestClient.For<IWireMockAdminApi>(server.Url); var api = RestClient.For<IWireMockAdminApi>(server.Url);
var mappings = await api.GetMappingsAsync().ConfigureAwait(false); var mappings = await api.GetMappingsAsync().ConfigureAwait(false);
mappings.Should().HaveCount(4); mappings.Should().HaveCount(5);
var code = await api.GetMappingsCodeAsync().ConfigureAwait(false); var code = await api.GetMappingsCodeAsync().ConfigureAwait(false);

View File

@@ -1,9 +1,8 @@
using NFluent;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using FluentAssertions; using FluentAssertions;
using NFluent;
using WireMock.Http; using WireMock.Http;
using WireMock.Models; using WireMock.Models;
using WireMock.Types; using WireMock.Types;

View File

@@ -31,5 +31,35 @@
BodyDestination: SameAsSource, BodyDestination: SameAsSource,
Body: { msg: "Hello world!"} Body: { msg: "Hello world!"}
} }
},
{
Guid: Guid_2,
UpdatedAt: 2023-01-14 15:16:17,
Request: {
Path: {
Matchers: [
{
Name: WildcardMatcher,
Pattern: /users/post2,
IgnoreCase: false
}
]
},
Methods: [
POST
],
Body: {
Matcher: {
Name: JsonMatcher,
Pattern: {
city: Amsterdam,
country: The Netherlands
},
IgnoreCase: false,
Regex: false
}
}
},
Response: {}
} }
] ]

View File

@@ -0,0 +1,30 @@
var builder = new MappingBuilder();
builder
.Given(Request.Create()
.UsingMethod("GET")
.WithPath("/foo")
.WithParam("test", "it.Length < 10")
)
.WithGuid("41372914-1838-4c67-916b-b9aacdd096ce")
.RespondWith(Response.Create()
.WithBody("{ msg: \"Hello world!\"}")
);
builder
.Given(Request.Create()
.UsingMethod("POST")
.WithPath("/users/post2")
.WithBody(new JsonMatcher(
value: new
{
city = "Amsterdam",
country = "The Netherlands"
},
ignoreCase: false,
regex: false
))
)
.WithGuid("98fae52e-76df-47d9-876f-2ee32e931d9b")
.RespondWith(Response.Create()
);

View File

@@ -0,0 +1,30 @@
var server = WireMockServer.Start();
server
.Given(Request.Create()
.UsingMethod("GET")
.WithPath("/foo")
.WithParam("test", "it.Length < 10")
)
.WithGuid("41372914-1838-4c67-916b-b9aacdd096ce")
.RespondWith(Response.Create()
.WithBody("{ msg: \"Hello world!\"}")
);
server
.Given(Request.Create()
.UsingMethod("POST")
.WithPath("/users/post2")
.WithBody(new JsonMatcher(
value: new
{
city = "Amsterdam",
country = "The Netherlands"
},
ignoreCase: false,
regex: false
))
)
.WithGuid("98fae52e-76df-47d9-876f-2ee32e931d9b")
.RespondWith(Response.Create()
);

View File

@@ -31,5 +31,34 @@
BodyDestination: SameAsSource, BodyDestination: SameAsSource,
Body: { msg: "Hello world!"} Body: { msg: "Hello world!"}
} }
},
{
Guid: Guid_2,
UpdatedAt: 2023-01-14T15:16:17,
Request: {
Path: {
Matchers: [
{
Name: WildcardMatcher,
Pattern: /users/post2,
IgnoreCase: false
}
]
},
Methods: [
POST
],
Body: {
Matcher: {
Name: JsonMatcher,
Pattern: {
city: Amsterdam,
country: The Netherlands
},
IgnoreCase: false,
Regex: false
}
}
}
} }
] ]

View File

@@ -13,6 +13,7 @@ using WireMock.RequestBuilders;
using WireMock.ResponseBuilders; using WireMock.ResponseBuilders;
using WireMock.Serialization; using WireMock.Serialization;
using WireMock.Settings; using WireMock.Settings;
using WireMock.Types;
using WireMock.Util; using WireMock.Util;
using Xunit; using Xunit;
@@ -73,6 +74,25 @@ public class MappingBuilderTests
.RespondWith(Response.Create() .RespondWith(Response.Create()
.WithBody(@"{ msg: ""Hello world!""}") .WithBody(@"{ msg: ""Hello world!""}")
); );
_sut.Given(Request.Create()
.WithPath("/users/post1")
.UsingPost()
.WithBodyAsJson(new
{
Request = "Hello?"
})
).RespondWith(Response.Create());
_sut.Given(Request.Create()
.WithPath("/users/post2")
.UsingPost()
.WithBody(new JsonMatcher(new
{
city = "Amsterdam",
country = "The Netherlands"
}))
).RespondWith(Response.Create());
} }
[Fact] [Fact]
@@ -95,6 +115,26 @@ public class MappingBuilderTests
return Verifier.VerifyJson(json, VerifySettings); return Verifier.VerifyJson(json, VerifySettings);
} }
[Fact]
public Task ToCSharpCode_Server()
{
// Act
var code = _sut.ToCSharpCode(MappingConverterType.Server);
// Verify
return Verifier.Verify(code, VerifySettings);
}
[Fact]
public Task ToCSharpCode_Builder()
{
// Act
var code = _sut.ToCSharpCode(MappingConverterType.Builder);
// Verify
return Verifier.Verify(code, VerifySettings);
}
[Fact] [Fact]
public void SaveMappingsToFile_FolderExists_IsFalse() public void SaveMappingsToFile_FolderExists_IsFalse()
{ {
@@ -141,9 +181,9 @@ public class MappingBuilderTests
_sut.SaveMappingsToFolder(null); _sut.SaveMappingsToFolder(null);
// Verify // Verify
_fileSystemHandlerMock.Verify(fs => fs.GetMappingFolder(), Times.Once); _fileSystemHandlerMock.Verify(fs => fs.GetMappingFolder(), Times.Exactly(2));
_fileSystemHandlerMock.Verify(fs => fs.FolderExists(mappingFolder), Times.Once); _fileSystemHandlerMock.Verify(fs => fs.FolderExists(mappingFolder), Times.Exactly(2));
_fileSystemHandlerMock.Verify(fs => fs.WriteMappingFile(It.IsAny<string>(), It.IsAny<string>()), Times.Once); _fileSystemHandlerMock.Verify(fs => fs.WriteMappingFile(It.IsAny<string>(), It.IsAny<string>()), Times.Exactly(2));
_fileSystemHandlerMock.VerifyNoOtherCalls(); _fileSystemHandlerMock.VerifyNoOtherCalls();
} }
@@ -159,8 +199,8 @@ public class MappingBuilderTests
// Verify // Verify
_fileSystemHandlerMock.Verify(fs => fs.GetMappingFolder(), Times.Never); _fileSystemHandlerMock.Verify(fs => fs.GetMappingFolder(), Times.Never);
_fileSystemHandlerMock.Verify(fs => fs.FolderExists(path), Times.Once); _fileSystemHandlerMock.Verify(fs => fs.FolderExists(path), Times.Exactly(2));
_fileSystemHandlerMock.Verify(fs => fs.WriteMappingFile(It.IsAny<string>(), It.IsAny<string>()), Times.Once); _fileSystemHandlerMock.Verify(fs => fs.WriteMappingFile(It.IsAny<string>(), It.IsAny<string>()), Times.Exactly(2));
_fileSystemHandlerMock.VerifyNoOtherCalls(); _fileSystemHandlerMock.VerifyNoOtherCalls();
} }
} }

View File

@@ -11,7 +11,7 @@ namespace WireMock.Net.Tests.Owin;
public class HostUrlOptionsTests public class HostUrlOptionsTests
{ {
[Fact] [Fact]
public void GetDetails_WithNoUrlsAndHttpScheme_ShouldReturnCorrectDetails() public void GetDetails_WithHostingSchemeHttpAndPort_ShouldReturnCorrectDetails()
{ {
// Arrange // Arrange
var options = new HostUrlOptions var options = new HostUrlOptions
@@ -28,14 +28,14 @@ public class HostUrlOptionsTests
var detail = details.Single(); var detail = details.Single();
detail.Should().Match<HostUrlDetails>(d => detail.Should().Match<HostUrlDetails>(d =>
d.Scheme == "http" && d.Scheme == "http" &&
d.Host == "localhost" && d.Host == "*" &&
d.Port == 8080 && d.Port == 8080 &&
d.IsHttps == false d.IsHttps == false
); );
} }
[Fact] [Fact]
public void GetDetails_WithNoUrlsAndHttpsScheme_ShouldReturnCorrectDetails() public void GetDetails_WithHostingSchemeHttpsAndPort_ShouldReturnCorrectDetails()
{ {
// Arrange // Arrange
var options = new HostUrlOptions var options = new HostUrlOptions
@@ -52,7 +52,7 @@ public class HostUrlOptionsTests
var detail = details.Single(); var detail = details.Single();
detail.Should().Match<HostUrlDetails>(d => detail.Should().Match<HostUrlDetails>(d =>
d.Scheme == "https" && d.Scheme == "https" &&
d.Host == "localhost" && d.Host == "*" &&
d.Port == 8081 && d.Port == 8081 &&
d.IsHttps == true d.IsHttps == true
); );

View File

@@ -499,4 +499,24 @@ public class WireMockServerAdminTests
Check.That(response.StatusCode).Equals(HttpStatusCode.OK); Check.That(response.StatusCode).Equals(HttpStatusCode.OK);
Check.That(await response.Content.ReadAsStringAsync().ConfigureAwait(false)).Equals($"{{\"Status\":\"Mappings deleted. Affected GUIDs: [{guid1}, {guid2}]\"}}"); Check.That(await response.Content.ReadAsStringAsync().ConfigureAwait(false)).Equals($"{{\"Status\":\"Mappings deleted. Affected GUIDs: [{guid1}, {guid2}]\"}}");
} }
[Fact]
public async Task WireMockServer_Admin_()
{
// given
var server = WireMockServer.Start();
server.CreateClient();
// when
await new HttpClient().GetAsync("http://localhost:" + server.Ports[0] + "/foo").ConfigureAwait(false);
// then
Check.That(server.LogEntries).HasSize(1);
var requestLogged = server.LogEntries.First();
Check.That(requestLogged.RequestMessage.Method).IsEqualTo("GET");
Check.That(requestLogged.RequestMessage.BodyData).IsNull();
server.Stop();
}
} }