From 10a21dbc576777d5e21785ba1d23b0b153f7a1de Mon Sep 17 00:00:00 2001 From: Stef Heyenrath Date: Mon, 8 Apr 2019 07:41:32 +0200 Subject: [PATCH] webapp (work in progress) --- WireMock.Net Solution.sln | 7 +++ src/WireMock.Net.WebApp/App.cs | 22 ++++++++ src/WireMock.Net.WebApp/IWireMockService.cs | 7 +++ src/WireMock.Net.WebApp/Program.cs | 52 +++++++++++++++++++ .../Properties/launchSettings.json | 38 ++++++++++++++ .../WireMock.Net.WebApp.csproj | 25 +++++++++ src/WireMock.Net.WebApp/WireMockLogger.cs | 43 +++++++++++++++ src/WireMock.Net.WebApp/WireMockService.cs | 39 ++++++++++++++ .../appsettings.Development.json | 9 ++++ src/WireMock.Net.WebApp/appsettings.json | 21 ++++++++ 10 files changed, 263 insertions(+) create mode 100644 src/WireMock.Net.WebApp/App.cs create mode 100644 src/WireMock.Net.WebApp/IWireMockService.cs create mode 100644 src/WireMock.Net.WebApp/Program.cs create mode 100644 src/WireMock.Net.WebApp/Properties/launchSettings.json create mode 100644 src/WireMock.Net.WebApp/WireMock.Net.WebApp.csproj create mode 100644 src/WireMock.Net.WebApp/WireMockLogger.cs create mode 100644 src/WireMock.Net.WebApp/WireMockService.cs create mode 100644 src/WireMock.Net.WebApp/appsettings.Development.json create mode 100644 src/WireMock.Net.WebApp/appsettings.json diff --git a/WireMock.Net Solution.sln b/WireMock.Net Solution.sln index a896255c..0decbbe9 100644 --- a/WireMock.Net Solution.sln +++ b/WireMock.Net Solution.sln @@ -62,6 +62,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WireMock.Net.Console.Net452 EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WireMock.Net.Console.NETCoreApp2", "examples\WireMock.Net.Console.NETCoreApp2\WireMock.Net.Console.NETCoreApp2.csproj", "{83645809-9E01-4E81-8733-BA9497554ABF}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WireMock.Net.WebApp", "src\WireMock.Net.WebApp\WireMock.Net.WebApp.csproj", "{D4782470-6CC1-4454-9D17-409F6CC286CE}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -136,6 +138,10 @@ Global {83645809-9E01-4E81-8733-BA9497554ABF}.Debug|Any CPU.Build.0 = Debug|Any CPU {83645809-9E01-4E81-8733-BA9497554ABF}.Release|Any CPU.ActiveCfg = Release|Any CPU {83645809-9E01-4E81-8733-BA9497554ABF}.Release|Any CPU.Build.0 = Release|Any CPU + {D4782470-6CC1-4454-9D17-409F6CC286CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D4782470-6CC1-4454-9D17-409F6CC286CE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D4782470-6CC1-4454-9D17-409F6CC286CE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D4782470-6CC1-4454-9D17-409F6CC286CE}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -158,6 +164,7 @@ Global {1261BB9B-A7D4-456C-8985-3CE560361B8E} = {F0C22C47-DF71-463C-9B04-B4E0F3B8708A} {668F689E-57B4-422E-8846-C0FF643CA268} = {F0C22C47-DF71-463C-9B04-B4E0F3B8708A} {83645809-9E01-4E81-8733-BA9497554ABF} = {F0C22C47-DF71-463C-9B04-B4E0F3B8708A} + {D4782470-6CC1-4454-9D17-409F6CC286CE} = {EF242EDF-7133-4277-9A0C-18744DE08707} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {BF428BCC-C837-433B-87D2-15C7014B73E9} diff --git a/src/WireMock.Net.WebApp/App.cs b/src/WireMock.Net.WebApp/App.cs new file mode 100644 index 00000000..04cd2dd0 --- /dev/null +++ b/src/WireMock.Net.WebApp/App.cs @@ -0,0 +1,22 @@ +using Microsoft.Extensions.Logging; + +namespace WireMock.Net.WebApp +{ + public class App + { + private readonly IWireMockService _service; + private readonly ILogger _logger; + + public App(IWireMockService service, ILogger logger) + { + _service = service; + _logger = logger; + } + + public void Run() + { + _logger.LogInformation("WireMock.Net WebApp running"); + _service.Run(); + } + } +} \ No newline at end of file diff --git a/src/WireMock.Net.WebApp/IWireMockService.cs b/src/WireMock.Net.WebApp/IWireMockService.cs new file mode 100644 index 00000000..7f2a2670 --- /dev/null +++ b/src/WireMock.Net.WebApp/IWireMockService.cs @@ -0,0 +1,7 @@ +namespace WireMock.Net.WebApp +{ + public interface IWireMockService + { + void Run(); + } +} \ No newline at end of file diff --git a/src/WireMock.Net.WebApp/Program.cs b/src/WireMock.Net.WebApp/Program.cs new file mode 100644 index 00000000..1479e99d --- /dev/null +++ b/src/WireMock.Net.WebApp/Program.cs @@ -0,0 +1,52 @@ +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using System; +using WireMock.Logging; +using WireMock.Settings; + +namespace WireMock.Net.WebApp +{ + public class Program + { + public static void Main(string[] args) + { + // Create service collection + var serviceCollection = new ServiceCollection(); + ConfigureServices(serviceCollection); + + // Create service provider + var serviceProvider = serviceCollection.BuildServiceProvider(); + + // Run app + serviceProvider.GetService().Run(); + } + + private static void ConfigureServices(IServiceCollection services) + { + // Build configuration + var configuration = new ConfigurationBuilder() + .SetBasePath(AppContext.BaseDirectory) + .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) + .AddEnvironmentVariables() // <-- this is needed to to override settings via the Azure Portal App Settings + .Build(); + + services.AddLogging(loggingBuilder => + { + loggingBuilder.AddConfiguration(configuration.GetSection("Logging")); + loggingBuilder.AddConsole(); + }); + + // Add access to IFluentMockServerSettings + var settings = configuration.GetSection("FluentMockServerSettings").Get(); + services.AddSingleton(settings); + + // Add services + services.AddTransient(); + services.AddTransient(); + + // Add app + services.AddTransient(); + } + } +} \ No newline at end of file diff --git a/src/WireMock.Net.WebApp/Properties/launchSettings.json b/src/WireMock.Net.WebApp/Properties/launchSettings.json new file mode 100644 index 00000000..a9275655 --- /dev/null +++ b/src/WireMock.Net.WebApp/Properties/launchSettings.json @@ -0,0 +1,38 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iis": { + "applicationUrl": "http://localhost//wiremock", + "sslPort": 0 + }, + "iisExpress": { + "applicationUrl": "http://localhost:56513/", + "sslPort": 0 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchUrl": "__admin/settings", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "WireMock.Net.WebApp": { + "commandName": "Project", + "launchBrowser": true, + "launchUrl": "__admin/settings", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "applicationUrl": "http://localhost:56514/" + }, + "IIS": { + "commandName": "IIS", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "development" + } + } + } +} \ No newline at end of file diff --git a/src/WireMock.Net.WebApp/WireMock.Net.WebApp.csproj b/src/WireMock.Net.WebApp/WireMock.Net.WebApp.csproj new file mode 100644 index 00000000..ac3265f8 --- /dev/null +++ b/src/WireMock.Net.WebApp/WireMock.Net.WebApp.csproj @@ -0,0 +1,25 @@ + + + + netcoreapp2.2 + InProcess + + + + + + + + + + + + + + + + PreserveNewest + + + + \ No newline at end of file diff --git a/src/WireMock.Net.WebApp/WireMockLogger.cs b/src/WireMock.Net.WebApp/WireMockLogger.cs new file mode 100644 index 00000000..5266d334 --- /dev/null +++ b/src/WireMock.Net.WebApp/WireMockLogger.cs @@ -0,0 +1,43 @@ +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using WireMock.Admin.Requests; +using WireMock.Logging; + +namespace WireMock.Net.WebApp +{ + public class WireMockLogger : IWireMockLogger + { + private readonly ILogger _logger; + + public WireMockLogger(ILogger logger) + { + _logger = logger; + } + + public void Debug(string formatString, params object[] args) + { + _logger.LogDebug(formatString, args); + } + + public void Info(string formatString, params object[] args) + { + _logger.LogInformation(formatString, args); + } + + public void Warn(string formatString, params object[] args) + { + _logger.LogWarning(formatString, args); + } + + public void Error(string formatString, params object[] args) + { + _logger.LogError(formatString, args); + } + + public void DebugRequestResponse(LogEntryModel logEntryModel, bool isAdminRequest) + { + string message = JsonConvert.SerializeObject(logEntryModel, Formatting.Indented); + _logger.LogDebug("Admin[{0}] {1}", isAdminRequest, message); + } + } +} diff --git a/src/WireMock.Net.WebApp/WireMockService.cs b/src/WireMock.Net.WebApp/WireMockService.cs new file mode 100644 index 00000000..445b1962 --- /dev/null +++ b/src/WireMock.Net.WebApp/WireMockService.cs @@ -0,0 +1,39 @@ +using Newtonsoft.Json; +using System.Threading; +using WireMock.Logging; +using WireMock.Net.StandAlone; +using WireMock.Settings; + +namespace WireMock.Net.WebApp +{ + public class WireMockService : IWireMockService + { + private static int sleepTime = 30000; + + private readonly IWireMockLogger _logger; + private readonly IFluentMockServerSettings _settings; + + public WireMockService(IWireMockLogger logger, IFluentMockServerSettings settings) + { + _logger = logger; + _settings = settings; + + _settings.Logger = logger; + } + + public void Run() + { + _logger.Info("WireMock.Net server starting"); + + StandAloneApp.Start(_settings); + + _logger.Info($"WireMock.Net server settings {JsonConvert.SerializeObject(_settings)}"); + + while (true) + { + _logger.Info("WireMock.Net server running"); + Thread.Sleep(sleepTime); + } + } + } +} \ No newline at end of file diff --git a/src/WireMock.Net.WebApp/appsettings.Development.json b/src/WireMock.Net.WebApp/appsettings.Development.json new file mode 100644 index 00000000..e203e940 --- /dev/null +++ b/src/WireMock.Net.WebApp/appsettings.Development.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Debug", + "System": "Information", + "Microsoft": "Information" + } + } +} diff --git a/src/WireMock.Net.WebApp/appsettings.json b/src/WireMock.Net.WebApp/appsettings.json new file mode 100644 index 00000000..b3cbb7f5 --- /dev/null +++ b/src/WireMock.Net.WebApp/appsettings.json @@ -0,0 +1,21 @@ +{ + "Logging": { + "IncludeScopes": false, + "Debug": { + "LogLevel": { + "Default": "Debug" + } + }, + "Console": { + "LogLevel": { + "Default": "Debug" + } + } + }, + "AllowedHosts": "*", + "FluentMockServerSettings": { + "AdminUsername": "a", + "AdminPassword": "b", + "StartAdminInterface": true + } +} \ No newline at end of file